Ответ 1
Шаг # 1: Удалите реализацию BroadcastReceiver
.
Шаг №2: Изучите Intent
, ваш сервис попадет в onStartCommand()
и просмотрите действие с помощью getAction()
.
Чтобы запустить мой сервис из 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);
С этим решением начинается сервис, но намерение не получено. Как запустить службу и передать мои параметры?
Спасибо за вашу помощь!
Шаг # 1: Удалите реализацию BroadcastReceiver
.
Шаг №2: Изучите Intent
, ваш сервис попадет в onStartCommand()
и просмотрите действие с помощью getAction()
.
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();
}
}