开发者

Android: start service with parameter

开发者 https://www.devze.com 2023-02-16 14:47 出处:网络
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 servic

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().

0

精彩评论

暂无评论...
验证码 换一张
取 消