Android: start service with parameter

35,254

Solution 1

Step #1: Delete your BroadcastReceiver implementation.

Step #2: Examine the Intent your service gets in onStartCommand() and look at the action via getAction().

Solution 2

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();
    }
}
Share:
35,254
Mike
Author by

Mike

Updated on August 18, 2022

Comments

  • Mike
    Mike almost 2 years

    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 start.

    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!