Имам приложение с услуга, регистрирана в AndroidManifest, за стартиране по време на зареждане. Правя това чрез Intent Receiver за BOOT_COMPLETED и това работи добре. Ако обаче потребителят стартира приложението веднага след инсталирането, бих искал да стартирам услугата от основната си дейност, тъй като тя може да не работи.
Не съм сигурен кой е най-добрият начин да направя това. Знам, че мога да извикам startService() от дейността и това работи, но след това мога да имам множество стартирани екземпляри на услугата. Не искам първо да спирам услугата, тъй като ако тя работи, просто искам този екземпляр да продължи да работи. Услугата може да е по средата на задача и не искам да спира.
В активност:
Intent serviceIntent = new Intent();
serviceIntent.setAction(MessageReceiverService.ClassName);
startService(serviceIntent);
Намерение за регистриране на манифест на Android:
<receiver android:name="com.app.proto1.service.StartupIntentReceiver" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<category android:name="android.intent.category.HOME" />
</intent-filter>
</receiver>
Моите методи за претоварване на услугата:
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onCreate() {
super.onCreate();
Log.d(Tag, "onCreate()");
}
@Override
public void onDestroy() {
super.onDestroy();
Log.d(Tag, "onDestroy()");
}
@Override
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(Tag, "onStart()");
this.registerReceiver(new SmsReceiver(), new IntentFilter(SMS_ACTION));
}
Има ли начин да проверя дали услугата вече работи и да не я стартирам отново и без да унищожа съществуващата?