广播收到两次

Teo*_*ald 14 service android broadcastreceiver

我正在使用本地广播让我的服务知道AsyncTask已完成其工作但我有一个小问题:广播只发送一次(它是由一个仅在应用程序启动时调用的函数创建的)但我收到两次.

简化代码:

@Override
protected void onPostExecute(HttpResponse result) {
    LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getBaseContext());
    localBroadcastManager.sendBroadcast(new Intent(getString(R.string.bc_CONNECTED)));
}
Run Code Online (Sandbox Code Playgroud)

在服务中:

private BroadcastReceiver connectedBroadcastReceiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(getString(R.string.app_tag), "broadcast received !!");
    }
};

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    LocalBroadcastManager.getInstance(this).registerReceiver(connectedBroadcastReceiver, new IntentFilter(getString(R.string.bc_CONNECTED)));
    return START_STICKY;
}
Run Code Online (Sandbox Code Playgroud)

有没有人遇到过这种奇怪的行为呢?

小智 22

我遇到了同样的问题,问题是我在onCreate方法和onResume方法中注册了接收器.从onCreate中删除问题已解决.


nan*_*esh 12

在响应广播之前,您应该始终检查意图操作.

public void onReceive(Context context, Intent intent){
      if(intent.getAction() != null && intent.getAction().equals(getString(R.string.bc_CONNECTED))){
      Log.d(getString(R.string.app_tag), "broadcast received !!");
 }
}
Run Code Online (Sandbox Code Playgroud)

查看文档.它说你可能会收到虚假的电话.因此,请务必检查行动

registerReceiver(BroadcastReceiver,IntentFilter)和应用程序清单中使用的Intent过滤器不保证是独占的.它们提示操作系统如何找到合适的收件人.发件人可以强制传递给特定收件人,绕过过滤器解析.因此,onReceive()实现应仅响应已知操作,忽略它们可能收到的任何意外Intent.