2

BroadcastReceiver特定のプラットフォームで変更された時間のみを登録したい状況があります。context.registerReceiverパフォーマンス上の理由から、必要なプラットフォームでのみメソッドを介してレシーバーを動的に登録したいと思います。アプリの初回実行時にプラットフォームを検出し、このイベントをリッスンするかどうかを決定できます。

このアプローチをテストしているときにcontext.registerReceiver、プロセスが実行されていない場合、アプリケーションを介して登録するときに目が覚めないことがわかりました。

これは予期されたものですか?それを回避するための設定はありますか?

IntentFilter filter = new IntentFilter(Intent.ACTION_TIME_CHANGED); 
this.getApplicationContext().registerReceiver(new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            // TODO Auto-generated method stub
            Log.e("MYTAG", "Received Broadcast from dyn one");


        }
    }, filter);
4

2 に答える 2

4

ブロードキャストが動的に登録されると、アプリケーションの実行中にのみメッセージを受信できます。目覚めさせたい場合は、マニフェストでブロードキャストを宣言する必要があります

于 2013-08-14T17:08:16.967 に答える
2

動的に登録されたレシーバーの有効期間は短いため、常にデバイスを起動するとは限りません。必要に応じて動作させたい場合は、マニフェストで宣言する必要があります。

PS: 最近まったく同じ問題が発生したので、これについてはかなり確信しています!

于 2013-08-15T15:08:39.813 に答える