要从Activiy启动我的服务,我使用startService(MyService.class)。这很有效,但在特殊情况下,服务应该以不同的方式启动。我想要将一些参数传递给服务启动。
我在我的活动中尝试了以下几种方法:
Intent startMyService= new Intent();
startMyService.setClass(this,LocalService.class);
startMyService.setAction("controller");
startMyService.putExtra(Constants.START_SERVICE_CASE2, true);
startService(startMyService);在我的服务中,我使用:
public class MyIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("controller"))
{
// Intent was received
}
}
} IntentReceiver在onCreate()中注册,如下所示:
IntentFilter mControllerIntent = new IntentFilter("controller");
MyIntentReceiver mIntentReceiver= new MyIntentReceiver();
registerReceiver(mIntentReceiver, mControllerIntent);使用此解决方案,服务将启动,但未收到意图。如何启动服务并传递参数?
谢谢你的帮忙!
发布于 2011-03-15 01:12:24
步骤1:删除您的BroadcastReceiver实现。
步骤#2:检查您的服务在onStartCommand()中获得的Intent,并查看通过getAction()执行的操作。
发布于 2013-05-28 20:19:46
Intent serviceIntent = new Intent(this,ListenLocationService.class);
serviceIntent.putExtra("From", "Main");
startService(serviceIntent);
//and get the parameter in onStart method of your service class
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Bundle extras = intent.getExtras();
if(extras == null) {
Log.d("Service","null");
} else {
Log.d("Service","not null");
String from = (String) extras.get("From");
if(from.equalsIgnoreCase("Main"))
StartListenLocation();
}
}https://stackoverflow.com/questions/5301891
复制相似问题