Android: запустить сервис с параметром - PullRequest
19 голосов
/ 14 марта 2011

Для запуска моего сервиса от 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);

При таком решении служба запускается, но намерение не получено. Как я могу запустить Сервис и передать свои параметры?

Спасибо за вашу помощь!

Ответы [ 2 ]

25 голосов
/ 28 мая 2013
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();
    }
}
14 голосов
/ 14 марта 2011

Шаг # 1: удалите реализацию BroadcastReceiver.

Шаг # 2: Изучите Intent, в который входит ваша служба onStartCommand(), и посмотрите на действие через getAction().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...