android:当onDeleted()为AppWidgetProvider时删除所有警报
问题描述:
我正在设置一个小部件,设置重复警报刷新。android:当onDeleted()为AppWidgetProvider时删除所有警报
要设置这些重复的警报,在配置活动,在OnClickListener(),我做的:
Intent widgetUpdate = new Intent();
widgetUpdate.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
widgetUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,mAppWidgetId);
widgetUpdate.setData(Uri.withAppendedPath(Uri.parse("wd_widget://widget/id/"), String.valueOf(mAppWidgetId)));
PendingIntent newPending = PendingIntent.getBroadcast(context, 0, widgetUpdate, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
int mins = 60;
alarms.cancel(newPending);
alarms.setRepeating(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime(), mins*1000*60,newPending);
而且我的AppWidgetProvider收到此意图在的onReceive(),并刷新视图:
if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(intent.getAction())) {
Bundle extras = intent.getExtras();
if(extras!=null) {
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
updateAppWidget(context, AppWidgetManager.getInstance(context), widgetId);
}
我的问题: 当我杀了Widget,报警保持活跃althought我的AppWidgetProvider的onDeleted()做的事:
Intent widgetUpdate = new Intent();
widgetUpdate.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
PendingIntent newPending = PendingIntent.getBroadcast(context, 0, widgetUpdate, PendingIntent.FLAG_UPDATE_CURRENT);
AlarmManager alarms = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
for (int appWidgetId : appWidgetIds) {
Log.i("DEBUG","Removing Alarms");
alarms.cancel(newPending);
}
那么如何在离开widget的时候杀掉所有的闹钟? Best, Christophe。
答
我认为你需要发送同样的意图来取消警报,即在onDeleted,你没有发送appWidgetId。
答
创建PendingIntent时,请为“请求代码”使用非零值。文档说它没有使用,但在我的应用程序中,我必须设置这个值。取消警报时,我使用相同的值清除警报。