進行中の通知を使用してサービスを存続させることができることは知っていますが、ブロードキャストレシーバーを保持しているサービスがあります。通知を使用して、単に放送受信機を保持したくありません。また、アプリのマニフェスト内にレシーバーを登録できることも知っていますが、レシーバーがアクティブかどうかをユーザーが制御できるようにしたいです。
これが再起動し続けるサービスです。
public class DockServiceListener extends Service{
IntentFilter filter;
BroadcastReceiver mReceiver;
public void onCreate() {
super.onCreate();
Toast.makeText(getApplicationContext(), "Receiver started!", Toast.LENGTH_SHOR
filter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
mReceiver = new DockReceiver();
}
public int onStartCommand(Intent intent, int flags, int id) {
super.onStartCommand(intent, START_STICKY, id);
registerReceiver(mReceiver, filter);
return id;
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
とてもシンプルです。アンドロイドのクリーンアップかもしれないことも知っていますが、Facebookメッセンジャーや他のサービスのアレントが閉鎖されるのはなぜですか?トーストメッセージが表示されない原因がわからない場合を除きますか?または、onCreateを1回だけ実行する方法はありますか?
とにかく、見てくれてありがとう!うまくいけば、誰かが私をよりよく教育することができます!:)
編集:これが正しいかどうか疑問に思う新しい方法?
startBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName dockReceiver = new ComponentName(getApplicationContext(), DockReceiver.class);
pm.setComponentEnabledSetting(dockReceiver, PackageManager.COMPONENT_ENABLED_STATE_ENABLED, 0);
finish();
}
});
stopBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
PackageManager pm = getApplicationContext().getPackageManager();
ComponentName dockReceiver = new ComponentName(getApplicationContext(), DockReceiver.class);
pm.setComponentEnabledSetting(dockReceiver, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
finish();
}
});