有时会调用BroadcastReceiver中的onReceive

时间:2015-12-02 21:04:37

标签: android

我在onCreate中注册了接收者,但onReceive有时会被调用,有时不会被调用。

public class MyReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.v("receiver","get called");

    }
}

以下是我在onCreate中注册接收器的方法

PROCESS_RESPONSE = getBaseContext().getResources().getString(R.string.serviceResponse);
IntentFilter filter = new IntentFilter(PROCESS_RESPONSE);
filter.addCategory(Intent.CATEGORY_DEFAULT);
receiver = new MyReceiver();
registerReceiver(receiver, filter);

以下是我发送广播的方式:

Intent broadcastIntent = new Intent();
PROCESS_RESPONSE=getBaseContext().getResources().getString(R.string.serviceResponse);
broadcastIntent.setAction(PROCESS_RESPONSE);
broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); 
sendBroadcast(broadcastIntent);

1 个答案:

答案 0 :(得分:0)

试试这个:

broadcastIntent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);

它有时起作用并且不起作用的原因是

  

因为Android 3.0引入了一个启动控制安全措施,可以防止已停止的应用程序的组件通过意图启动。如果应用程序刚刚安装且之前未启动,或者用户使用设备上的应用程序管理器手动停止,则认为应用程序处于停止状态。但是,为了解决这个问题,可以在发送之前将一个标志添加到意图中,以指示允许意图启动已停止应用程序的组件。

Quote source

因此,当您尝试全新安装(从IDE启动)时,应用程序将被视为处于停止状态一段时间,之后则不会。因此,当您尝试播放时,它有时无法正常工作。让我知道这是否有效,当然确保你已经注册了BroadcastReciever(我确定你有,如果它有效,至少在某些时候)。