屏幕打开/关闭时如何更新 Android 小部件?
Posted
技术标签:
【中文标题】屏幕打开/关闭时如何更新 Android 小部件?【英文标题】:How to update an Android widget when the screen is turned On/Off? 【发布时间】:2022-01-01 03:57:39 【问题描述】:我编写了一个电池监视器小部件,我可以在屏幕打开时使用带有 BroadcastReceivers 和警报的后台服务来更新它。我也可以在屏幕关闭时停止更新。但是,Service 只会运行到系统停止后台服务。
-
我不想使用前台服务,因为不需要通知用户。
总是检查并重新启动后台服务似乎不是一个好的解决方案。
我认为我不能将服务绑定到小部件。但是,我是新手,还在学习。
如何解决这个问题?我开始调查 WorkManager 但没有找到什么 我在找。
任何能指引我正确方向的建议将不胜感激。
【问题讨论】:
【参考方案1】:你可以创建一个监听类来监听安卓锁屏和解锁事件,使用广播接收屏幕状态。
private class ScreenBroadcastReceiver : BroadcastReceiver
private String action = null;
public override void OnReceive(Context context, Intent intent)
action = intent.Action;
if (Intent.ActionScreenOn == action)
// screen on
mScreenStateListener.onScreenOn();
else if (Intent.ActionScreenOff == action)
// screen off
mScreenStateListener.onScreenOff();
else if (Intent.ActionUserPresent == action)
// unlock
mScreenStateListener.onUserPresent();
有关监听器的更多代码,您可以参考下面的链接。 https://***.com/a/55014763/11850033
您可以覆盖 AppWidgetProvider
的 OnUpdate。然后在您的 Widget 上触发 onUpdate。
How to call onUpdate method of widget on button click?
更新:
你可以尝试提高上下文的水平。
mContext.ApplicationContext.RegisterReceiver(mScreenReceiver, filter);
【讨论】:
我从提供的链接创建了 Listener 类。但是,在注册广播接收器时出现运行时错误。android.Content.ReceiverCallNotAllowedException: 'BroadcastReceiver components are not allowed to register to receive intents'
我再次检查了监听器。它仍然有效。您可以尝试使用 ApplicationContext。请使用我的更新中的代码。它也有效。
我认为它做到了。谢谢!
哈哈,乐于助人。以上是关于屏幕打开/关闭时如何更新 Android 小部件?的主要内容,如果未能解决你的问题,请参考以下文章
主屏幕小部件 BroadcastReceiver 可以监听电话事件吗?