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

Posted

技术标签:

【中文标题】主屏幕小部件 BroadcastReceiver 可以监听电话事件吗?【英文标题】:Can a homescreen widget BroadcastReceiver listen for phone events? 【发布时间】:2020-06-20 18:07:53 【问题描述】:

当有“请勿打扰”更改时,我正在尝试更新我的主屏幕小部件。因为 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!");
        
     

【问题讨论】:

【参考方案1】:

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

还有:

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

您没有显示Toast;相反,您正在向标准输出打印一条消息,该消息应该被重定向到 Android 上的 Logcat

【讨论】:

谢谢,是的,对不起,我的意思是 sout 不是 Toast...DND 更改广播在我的主要活动中运行良好。是的,WidgetProvider 已在我的清单中注册,这可以解释为什么它不起作用。再次感谢,这是有道理的!

以上是关于主屏幕小部件 BroadcastReceiver 可以监听电话事件吗?的主要内容,如果未能解决你的问题,请参考以下文章

使用 appWidgetId 检查主屏幕上是不是存在小部件

Android 主屏幕小部件 textsize 动态

Android主屏幕小部件未更新

应用小部件仅在主屏幕上显示为灰色

尝试添加第二个主屏幕小部件后,PendingIntents 不会触发

如何从 android 主屏幕小部件启动活动