0

進行中の通知を使用してサービスを存続させることができることは知っていますが、ブロードキャストレシーバーを保持しているサービスがあります。通知を使用して、単に放送受信機を保持したくありません。また、アプリのマニフェスト内にレシーバーを登録できることも知っていますが、レシーバーがアクティブかどうかをユーザーが制御できるようにしたいです。

これが再起動し続けるサービスです。

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();

        }
    });
4

1 に答える 1

1

また、アプリのマニフェスト内にレシーバーを登録できることも知っていますが、レシーバーがアクティブかどうかをユーザーが制御できるようにしたいです。

次に、とを使用PackageManagerして、マニフェストに登録されているsetComponentEnabledSetting()を有効または無効にします。BroadcastReceiver「レシーバーがアクティブかどうか」を制御するためだけに、サービスでユーザーのRAMを浪費する必要はありません。

于 2013-03-19T18:13:00.333 に答える