【问题标题】:How to update an Android widget when the screen is turned On/Off?屏幕打开/关闭时如何更新 Android 小部件?
【发布时间】:2022-01-01 03:57:39
【问题描述】:

我编写了一个电池监视器小部件,我可以在屏幕打开时使用带有 BroadcastReceivers 和警报的后台服务来更新它。我也可以在屏幕关闭时停止更新。但是,Service 只会运行到系统停止后台服务。

  1. 我不想使用前台服务,因为不需要通知用户。
  2. 总是检查并重新启动后台服务似乎不是一个好的解决方案。
  3. 我认为我不能将服务绑定到小部件。但是,我是新手,还在学习。

如何解决这个问题?我开始调查 WorkManager 但没有找到什么 我在找。

任何能指引我正确方向的建议将不胜感激。

【问题讨论】:

    标签: c# android xamarin widget


    【解决方案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://stackoverflow.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。请使用我的更新中的代码。它也有效。
    • 我认为它做到了。谢谢!
    • 哈哈,乐于助人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 1970-01-01
    • 2018-03-20
    • 2019-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多