【问题标题】:BroadcastReceiver's onReceive() is failing to receive the broadcast sent by another BroadcastReceiverBroadcastReceiver 的 onReceive() 接收不到另一个 BroadcastReceiver 发送的广播
【发布时间】:2016-12-27 08:54:32
【问题描述】:

我有一个Service,从那里我将广播intent 发送到BroadcastReceiver,然后这个广播接收器将它发送回BroadcastReceiverService 中指定的@。

代码如下:

private Notification getNotificationAU() {
        mBuilder =
                new NotificationCompat.Builder(getBaseContext())
                        .setSmallIcon(R.mipmap.app_icon_1)
                        .setContentTitle("title")
                        .setContentText(***);

        // for action button
        Intent actionIntent = new Intent(getBaseContext(), BroadcastSender.class);
        PendingIntent actionPendingIntent = PendingIntent
                .getBroadcast(getBaseContext(),
                        0, actionIntent, PendingIntent.FLAG_UPDATE_CURRENT);

        mBuilder.setAutoCancel(true);
        mBuilder.addAction(***, "***", actionPendingIntent);
        return mBuilder.build();
    }

这里是BroadcastSender.class 代码:

public class BroadcastSender extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Broadcast Received by BroadcastSender", Toast.LENGTH_SHORT).show();

        // send back to your class
        Intent newIntent = new Intent();
        newIntent.setAction(context.getString(R.string.broadcast_id));
        context.sendBroadcast(newIntent);
        context.sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
        Toast.makeText(context, "Broadcast sent back.", Toast.LENGTH_SHORT).show();

    }
}

both上面的Toasts 正在显示。

这是BroadcastReceiver 里面的Service

    public class MyBroadcastReceiver extends BroadcastReceiver {

        public MyBroadcastReceiver(){
            super();
        }

        @Override public void onReceive(Context context, Intent intent) {

            Toast.makeText(context, "onReceive() in service called", Toast.LENGTH_SHORT).show();

        if (intent.getAction() != null && intent.getAction().equals(getString(R.string.broadcast_id_2))) {
               ...
               ...
               ...
        } else if (intent.getAction() != null && intent.getAction().equals(getString(R.string.broadcast_id))) {

                // perform the task

        } else {
                Toast.makeText(context, "Intent is null.", Toast.LENGTH_SHORT).show();
        }
        }
    }

这是strings.xml

<string name="broadcast_id">***</string>

这里是AndroidManifest.xml

<receiver android:name=".BroadcastSender"/>

问题是MyBroadcastReceiver 没有接收到任何广播,即使两者具有相同的广播 ID R.string.broadcast_id

为什么收不到BroadcastSender.class发送的广播?

请告诉我。

【问题讨论】:

  • 如何注册和注销广播接收器?你能显示那个代码吗
  • 能否将您在服务中注册 MyBroadcastReceiver 的代码粘贴过来?
  • 感谢您发现这个愚蠢的错误!我在注册广播接收器时忘记添加myIntentFilter.addAction(getString(R.string.broadcast_id));。现在可以了!
  • 欢迎兄弟
  • 请回答您自己的问题并接受该答案。它将从未回答的问题列表中删除此问题。

标签: android broadcastreceiver android-pendingintent android-broadcast android-broadcastreceiver


【解决方案1】:

这里的问题是注册BroadcastReceiver时没有添加行myIntentFilter.addAction(getString(R.string.broadcast_id));

添加行后就解决了。

感谢Jitesh MohiteHasif Seyd 帮助我找出这个小而关键的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多