Android:将变量传递给已经运行的服务

时间:2013-03-11 19:12:41

标签: android android-intent service android-activity

我在将值从Activity传递到已经运行的服务时遇到问题。我想知道最好的方法是什么?添加额外内容不会工作,因为我认为必须在意图开始之前完成此操作? (如我错了请纠正我)。

任何帮助都会很棒!如果需要,我可以详细说明。

2 个答案:

答案 0 :(得分:31)

如果您的服务不是IntentService,则可以根据需要多次拨打startService(...)。该服务将在第一次运行,但下一次调用将导致新onStartCommand()次呼叫,并带有您需要的新额外服务。

检查this answerdoc

答案 1 :(得分:0)

将意向传递给服务 从活动开始这个意图 如果服务正在运行,请尝试从活动中进行操作,然后使用putExtra传递参数。

Intent rc = new Intent(getApplicationContext(), myService.class);
rc.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); //important for Android 10
rc.putExtra("parama","ciao");
rc.putExtra("paramb","hello");
startService(rc);

记住,新线程,退出到主线程。

new Thread(){
    @Override
        public void run() {
            super.run();
            //start service..
        }    
}

您的服务

 public class myService extends Service {
               @Override
                public int onStartCommand(Intent intent, int flags, int startId) {
                if (intent.hasExtra("parama")){            
                Bundle b=new Bundle();
                b=intent.getExtras();
                String par_a=b.getString("parama");
                }
                if (intent.hasExtra("paramb")){            
                Bundle b=new Bundle();
                b=intent.getExtras();
                String par_b =b.getString("paramb");
                }
        }
    }