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 回答