AndroidManifest にサービスが登録されているアプリケーションを起動時に起動します。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>
My Service オーバーロード メソッド:
@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));
}
サービスが既に実行されているかどうかを確認し、再度開始せず、既存のサービスを破棄する方法はありますか?