android – 如何在午夜更新应用小部件?

android – 如何在午夜更新应用小部件?,第1张

概述我的应用程序有一个显示今天日期的小部件,需要在午夜更新.窗口小部件在清单中定义为 <manifest> ... <application> ... <receiver android:name=".MyWidgetProviderClass" android:label="MyLabel" > 我的应用程序有一个显示今天日期的小部件,需要在午夜更新.窗口小部件在清单中定义为
<manifest>    ...    <application>        ...        <receiver            androID:name=".MyWidgetProvIDerClass"            androID:label="MyLabel" >            <intent-filter>                <action androID:name="androID.appWidget.action.APPWidget_UPDATE" />            </intent-filter>            <Meta-data                androID:name="androID.appWidget.provIDer"                androID:resource="@xml/Widget_icon_info" />        </receiver>    </application></manifest>

小部件信息文件是

<appWidget-provIDer xmlns:androID="http://schemas.androID.com/apk/res/androID"    androID:initialLayout="@layout/my_layout"    androID:minHeight="40dp"    androID:minWIDth="294dp"    androID:updatePeriodMillis="3600000" ></appWidget-provIDer>

这会导致小部件在午夜和下午1点之间的任何时间更新,但我想更新到更接近午夜,所以我在应用程序中添加了一个意图接收器

<receiver     androID:name=".MyWidgetUpdaterClass"     androID:enabled="true" >     <intent-filter>         <action androID:name="MyAction" />      </intent-filter></receiver>

和静态方法

public static voID setMIDngintAlarms(Context context) {    Intent intent = new Intent("MyAction");    PendingIntent pendingIntent =         PendingIntent.getbroadcast(context,intent,0);                  long interval = 24*60*60*1000;            long firstTime = SystemClock.elapsedRealtime() +         millisecondsToNextMIDnight();    AlarmManager am = (AlarmManager)context.getSystemService(        Context.ALARM_SERVICE);    am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,firstTime,interval,pendingIntent);}

(因为警报管理器以相同的意图请求相互覆盖,所以多次调用setMIDngintAlarms没有坏处).

我尝试从几个地方(从应用程序的主要活动,从appwidgetprovider的onUpdate()等)调用setMIDnightAlarms().一切运行良好,接收到警报管理器意图,并且只有应用程序运行时才更新窗口小部件.如果我杀了应用程序,小部件会在午夜停止更新.

知道如何让小部件在午夜更新吗?我需要添加服务吗?如果是这样的话?任何例子?

我有点惊讶的是,让这个基本功能起作用是多么微不足道.

解决方法 我解决了这个问题:

>启动服务以侦听Intent.ACTION_TIME_TICK消息.
然后,如果Time TICKED,则向小部件发送广播. (每分钟).
>接收小部件中的广播,并通过以下方式判断天气是午夜:

码:

if (MyWidget.broADCAST_TIME_TICK.equals(action)) {        //If it's mIDnight,then update.        int hour = Calendar.getInstance().get(Calendar.HOUR);        int minute = Calendar.getInstance().get(Calendar.MINUTE);        Utils.log(TAG,"time is : " + hour+":" + minute);        if (!(hour == 0 && minute == 0)) {  //Only update at mIDnight's time tick.            return;        } else {            //Do the mIDnight stuff.        }    }
总结

以上是内存溢出为你收集整理的android – 如何在午夜更新应用小部件?全部内容,希望文章能够帮你解决android – 如何在午夜更新应用小部件?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1135400.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存