android - 启动后立即恢复小部件状态

标签 android widget boot

我希望我的小部件在重新启动手机后立即显示其最后的数据(图像和文本)。重新启动后,我的小部件的 AppWidgetProvider.onUpdate() 被调用,我在那里成功更新了它。但是,在实际调用 onUpdate() 之前可能需要很长时间。重新启动后,首先出现主屏幕,我的小部件会显示其默认布局长达 30 秒。最后 onUpdate() 被调用,小部件自行更新。我还尝试听取 BOOT_COMPLETED Intent ,但在小部件收到它之前需要同样长的时间。

AccuWeather 小部件是如何做到的?主屏幕一出现,AccuWeather 就会立即显示其最新内容。它在恢复之前没有很长的初始延迟。有没有办法将数据动态保存到布局中,以便在启动时立即获取?

编辑:我确定我提到的 AccuWeather 小部件实际上是三星手机中包含的东西。它可能与操作系统 Hook 以便提前加载。当我尝试使用 Play 商店的小部件时,它们在启动后似乎都有延迟才能更新其内容。这看起来像是我不得不忍受的东西,但如果有人有想法,我将不胜感激。

最佳答案

您必须像这样在您的 Manifest.xml 中创建一个启动完成接收器:

 <receiver
        android:name=".BootUpReceiver"
        android:enabled="true"
        android:exported="false" >
        <intent-filter>
            <action android:name="android.intent.action.BOOT_COMPLETED" />
            <action android:name="com.example.boot" />
        </intent-filter>
    </receiver>

然后在 BootUpReceiver.java 中,您可以获取所有应用小部件 ID 并更新它们:

AppWidgetManager widgetManager = AppWidgetManager.getInstance(context);
    ComponentName widgetComponent = new ComponentName(context,MyWidgetProvider.class);
    int[] appWidgetIds = widgetManager.getAppWidgetIds(widgetComponent);

    for(int i=0;i<appWidgetIds.length;i++) {

        //Updating code here
    }

关于android - 启动后立即恢复小部件状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20577818/

相关文章:

java - 第二次用字符串元素数组填充微调器时出错

android - 无法将 .aar 与依赖项一起发布?

Android Logo 太小

widget - 如何覆盖小部件 Assets ? (yii2)

xml - Tomcat 启动(默认 web.xml)问题

android - 如何减少嵌入式 android 操作系统的启动时间?

amazon-s3 - AWS - boto.connect_s3() 在 EC2 实例启动时报告 "No handler was ready to authenticate"

iphone - 移动浏览器 - 后退按钮

Python - 动态选择新数据框的列

javascript - 在vue中包含外部js的标准方法是什么