2011-05-27 82 views
0

我正在嘗試幾天來解決此問題,希望有人能幫助我。使用Alarm Manager和PendingIntent無法啓動窗口小部件更新

我使用Alarm Manager讓我的小部件更新,只需要一次我想要的(如果在30分鐘內起訴XML只有一次),所以我提出了一個掛起的意圖,並在我發現的例子中寫下它,但它的更新只有一次當我編譯程序。

這裏是萬畝代碼:

@Override 
    public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) 
    { 
     android.util.Log.w("FullTankWidget.UpdateService", "onUpdate()"); 

     Intent updateIntent = new Intent("android.appwidget.action.APPWIDGET_UPDATE"); 


     PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, updateIntent, PendingIntent.FLAG_CANCEL_CURRENT); 
     AlarmManager alarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE); 

     // alarmManager.setRepeating(AlarmManager.RTC, nextMinute.getTimeInMillis(),60000,pendingIntent); 
     long firstTime = SystemClock.elapsedRealtime(); 
     alarmManager.set(AlarmManager.RTC, firstTime + (60 * 1000), pendingIntent); 

     android.util.Log.w("FullTankWidget.UpdateService", String.valueOf(firstTime)); 
     // To prevent any ANR timeouts, we perform the update in a service 
     context.startService(new Intent(context,WidgetUpdateService.class)); 

意圖過濾器writen在清單 - defoult部件reciever

<receiver android:name=".FullTankWidget" > 
    <intent-filter> 
     <action android:name="android.appwidget.action.APPWIDGET_UPDATE" /> 
    </intent-filter> 
    <meta-data android:name="android.appwidget.provider"  android:resource="@xml/fulltank_widget_config" /> 
    </receiver> 

回答

0

但你alarmManager.setRepeating()行註釋掉...

0

首先你還應該在意圖中指定你的類。

updateIntent.setClass(context, YourProviderClassName.class); 

然後它是PendingIntent的主題。 PendingIntent過濾器在後臺工作,不允許將兩個類似的Intents設置爲掛起。所以當它被調用時,如果它有類似的意圖,它將被忽略。

如果在您的appwidget提供商信息中,您的值爲 updatePeriodMillis非零,那麼系統已經設置了PendingIntent進行更新。這就是爲什麼您的新PendingIntent將無法工作

解決方法是禁用updatePeriodMillis並使用AlarmManager。 AlarmManager類具有幫助您以您想要的方式設置PendingIntents的方法。但請記住,您一次只能擁有一個PendingIntent。

相關問題