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时,请为“请求代码”使用非零值。文档说它没有使用,但在我的应用程序中,我必须设置这个值。取消警报时,我使用相同的值清除警报。