无法使用 AlarmManager 和日历更新 Android 小部件
Cannot update Android Widget using AlarmManager and Calendar
我想更新我的小部件,但它根本不起作用!我这样做是为了让更新在特定时间发生——在我 运行 应用程序几分钟后,但小部件没有得到更新。我知道这一点,因为我正在使用 System.currentTimeMillis 设置标签。当应用程序更新时,此标签应具有新值。我按照 Android AlarmManager 文档告诉我的那样做了所有事情。
views.setTextViewText(R.id.todayDate,System.currentTimeMillis()+"");
所以这是我在
的 onReceive 和 onUpdate 中所做的
public class CalendarWidget extends AppWidgetProvider
更多代码
Calendar todayMidnight = Calendar.getInstance();
todayMidnight.setTimeInMillis(System.currentTimeMillis());
todayMidnight.add(Calendar.DATE, 0);
todayMidnight.set(Calendar.HOUR_OF_DAY, 23);
todayMidnight.set(Calendar.MINUTE, 2);
todayMidnight.set(Calendar.SECOND, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent (context, CalendarWidget.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
alarm.setRepeating(AlarmManager.RTC, todayMidnight.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
...
views.setTextViewText(R.id.todayDate,System.currentTimeMillis()+"");
在清单中
<receiver
android:name="com.standardSPenPlannerInhoHwang.CalendarWidget"
android:theme="@android:style/Theme.Translucent"
android:process=":remote"
android:enabled="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.DATE_CHANGED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@layout/calendar_widget2" />
</receiver>
但是应用程序在 11:02PM 没有更新!!这应该有效,对吧? (请注意,我从我的活动中更新小部件工作正常。只是警报管理器不更新小部件!)
CalendarWidget 是您的接收器吗class?
你需要一个接收器 class
public class AlarmReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
//Alarm received,update your widget
}
}
在你的 activity:
Intent alarmIntent=new Intent(yourActivity.this,AlarmReceiver.class);
PendingIntent pi=PendingIntent.getActivity(context,ID,intent,0);
AlarmManager manager =(AlarmManager)getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC, ... ,pendingIntent);
我想更新我的小部件,但它根本不起作用!我这样做是为了让更新在特定时间发生——在我 运行 应用程序几分钟后,但小部件没有得到更新。我知道这一点,因为我正在使用 System.currentTimeMillis 设置标签。当应用程序更新时,此标签应具有新值。我按照 Android AlarmManager 文档告诉我的那样做了所有事情。
views.setTextViewText(R.id.todayDate,System.currentTimeMillis()+"");
所以这是我在
的 onReceive 和 onUpdate 中所做的public class CalendarWidget extends AppWidgetProvider
更多代码
Calendar todayMidnight = Calendar.getInstance();
todayMidnight.setTimeInMillis(System.currentTimeMillis());
todayMidnight.add(Calendar.DATE, 0);
todayMidnight.set(Calendar.HOUR_OF_DAY, 23);
todayMidnight.set(Calendar.MINUTE, 2);
todayMidnight.set(Calendar.SECOND, 0);
AlarmManager alarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent (context, CalendarWidget.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT);
alarm.setRepeating(AlarmManager.RTC, todayMidnight.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
...
views.setTextViewText(R.id.todayDate,System.currentTimeMillis()+"");
在清单中
<receiver
android:name="com.standardSPenPlannerInhoHwang.CalendarWidget"
android:theme="@android:style/Theme.Translucent"
android:process=":remote"
android:enabled="true">
<intent-filter>
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
<action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
<action android:name="android.intent.action.TIMEZONE_CHANGED" />
<action android:name="android.intent.action.TIME_SET" />
<action android:name="android.intent.action.DATE_CHANGED" />
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<meta-data
android:name="android.appwidget.provider"
android:resource="@layout/calendar_widget2" />
</receiver>
但是应用程序在 11:02PM 没有更新!!这应该有效,对吧? (请注意,我从我的活动中更新小部件工作正常。只是警报管理器不更新小部件!)
CalendarWidget 是您的接收器吗class?
你需要一个接收器 class
public class AlarmReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
//Alarm received,update your widget
}
}
在你的 activity:
Intent alarmIntent=new Intent(yourActivity.this,AlarmReceiver.class);
PendingIntent pi=PendingIntent.getActivity(context,ID,intent,0);
AlarmManager manager =(AlarmManager)getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC, ... ,pendingIntent);