2012-02-25 17 views
0

我有一些奇怪的行爲,我只能假設是因爲我正在使用的等待意圖。如何取消Android Widget中的待處理內容?

情景

我有具有4個按鍵的微件(4×1)。在小部件的onUpdate中,我爲每個按鈕添加一個待定的意圖。我的意圖用一個bundeled參數觸發一個Service,並根據這個參數啓動一些東西。我附上意圖,因爲這:

RemoteViews views = new RemoteViews(context.getPackageName(), R.layout.widget_layout); 

Bundle b = new Bundle(); 
b.putString("myVariable", someVariable); 

Intent intent = new Intent(context, AppStarterService.class); 
intent.putExtras(b); 

PendingIntent pendingIntent = PendingIntent.getService(context, buttopnPosition, intent, 0); 
views.setOnClickPendingIntent(R.id.btnOne, pendingIntent); 

問題

代碼工作得很好,直到用戶決定更新按鈕的內容。然後,完成一個新的待定意向。所以,當我再次按下按鈕時,有時它仍然執行舊的意圖,而不是新的意圖。我不知道如何更好地解釋這一點。假設我的第一個意圖參數是「TestOne」,在我更新後,新意圖的參數是「TestX」。當用戶點擊按鈕時,在我的服務中,我仍然使用「TestOne」代替「TestX」。所以,我的猜測是,不知何故,當widget按鈕內容發生變化時,我需要取消先前的意圖。 這是問題嗎?難道我做錯了什麼 ?我如何取消舊的意圖,我需要重新創建它,然後取消它?

謝謝你的時間。

+0

你試過了* pendingIntent.cancel(); * before * views.setOnClickPendingIntent(R.id.btnOne,pendingIntent); *? – Dharmendra 2012-02-25 09:02:57

回答

1

你一直有這個問題,我甚至有FLAG_UPDATE_CURRENT,嘗試定義每個時間不同requestCode,像這樣的東西:

private static int request = 0; 
... 
PendingIntent pendingIntent = PendingIntent.getService(context, request++, intent, 0); 

所以每次創建一個新的PendingIntent時,至少在類的生命期間會使用一個新的requestCode。

我希望它有幫助。

+0

它的工作原理!謝謝你節省了我的時間! – pjanecze 2012-03-20 17:57:24

相關問題