To start my service from an Activiy I use startService(MyService.class)
. This works great, but in a special case the service should be started differently. I want to pass some parameters to the service star开发者_运维知识库t.
I tried the following in my Activity:
Intent startMyService= new Intent();
startMyService.setClass(this,LocalService.class);
startMyService.setAction("controller");
startMyService.putExtra(Constants.START_SERVICE_CASE2, true);
startService(startMyService);
In my Service I use:
public class MyIntentReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("controller"))
{
// Intent was received
}
}
}
The IntentReceiver is registered in onCreate() like this:
IntentFilter mControllerIntent = new IntentFilter("controller");
MyIntentReceiver mIntentReceiver= new MyIntentReceiver();
registerReceiver(mIntentReceiver, mControllerIntent);
With this solution the service starts but the intent is not received. How can I start a Service and pass my parameters?
Thanks for your help!
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();
}
}
Step #1: Delete your BroadcastReceiver
implementation.
Step #2: Examine the Intent
your service gets in onStartCommand()
and look at the action via getAction()
.
精彩评论