主屏幕小部件 BroadcastReceiver 可以监听 phone 事件吗?

Can a homescreen widget BroadcastReceiver listen for phone events?

当出现“请勿打扰”更改时,我正在尝试更新我的主屏幕小部件。因为WidgetProvider本身就是一个BroadcastReceiver,本来以为会很简单。但是当我打开或关闭 Dnd 时,我没有看到任何 Toast。是不是WidgetProvider只能发广播不能收?

这是我的代码:

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

        String action = intent.getAction();

        assert action != null;
        if (action.equals(NotificationManager.ACTION_INTERRUPTION_FILTER_CHANGED)) {
            System.out.println("Success!");
        }
     }

您没有显示您是如何注册该广播的。如果它在清单中,则您尝试接收的广播未在 the implicit broadcast exceptions "whitelist" 上列出,因此您可能无法在 Android 8.0+ 上接收到它。您能够在 Android 8.0+ 上接收到该广播的唯一方法是,如果您一直有前台服务 运行,那是有成本的。

还有:

  • 我不熟悉那个特定的广播,所以我不确定它是否是在 DND 更改时发送的(尽管它看起来确实有道理)

  • 你没有显示Toast;相反,您正在向标准输出打印一条消息,该消息应该在 Android

  • 上重定向到 Logcat