2012-07-12 62 views
1

我有一個widget,它設置了一些pendingIntents。只要我在主屏幕上只有一個小工具,所有工作都很好。嘗試添加第2個主屏幕小部件後PendingIntents不會觸發

目前,我決定我將限制用戶只有一個主屏幕小部件。如果已經在使用中,則ConfigureActivity給用戶一個alertDialog框,告訴他們他們不能再添加第二個,然後設置setResult(RESULT_CANCELED, null)然後完成()。

這工作得很好,並保持用戶無法設置任何進一步的主屏幕小部件,但對於已經在位的大多數我的pendingIntents不會觸發。 Logcat告訴我「不能發送待定意圖:」

每個pendingIntents設置爲啓動一個用於更新小部件的服務。如果我刪除小部件並重置它,它會再次正常工作,直到我嘗試添加第二個小部件。在這一點上,我有點困惑。任何人有任何想法,爲什麼開始添加第二個小部件,但沒有完成它會取消我以前的pendingIntents?

重要的是,pendingIntents設置爲FLAG_CANCEL_CURRENT

以下是用於設置我的intentpendingIntents的代碼。

Intent intentDialog = new Intent(getBaseContext(), ScheduleActionsActivity.class); 
intentDialog.putExtra("Action", ACTION_ENTER_SCHEDULE); 
intentDialog.setAction("abc.hwRowOne"); 
intentDialog.putExtra("scheduleId", sch.getId()); 
intentDialog.putExtra("scheduleDescription", sch.getDescription()); 
PendingIntent pendingIntentDialog1 = PendingIntent.getActivity(getBaseContext(), 0, intentDialog, PendingIntent.FLAG_CANCEL_CURRENT); 
views.setOnClickPendingIntent(R.id.hwRowOne, pendingIntentDialog1); 

所在行intentDialog.setAction()變化是小部件的每一行唯一的,所以我認爲這是使我的PendingIntent獨特的爲好。

昨天晚上發佈我的問題後,我看到了這個答案,但我不知道爲什麼/如何工作,我不確定把它放在我的區域。它似乎爲每個意圖設置了一個獨特的數據,但這正是我認爲我的.setAction()正在做的事情。 Multiple Instances Of Widget Only Updating Last widget

所以要回答你的問題,不,我沒有在我的意圖中使用appWidgetId,我只需要將它作爲putExtra()然後在intentDialog上傳遞?

+0

您是否正確使用WidgetID來指示PendingIntent需要更新哪個小部件?無論何時您有多個小部件從服務更新它,您都需要將正確的小部件ID傳遞給它。 – MKJParekh 2012-07-12 05:50:36

回答

0

回答這個問題解決了我的問題: Multiple Instances Of Widget Only Updating Last widget

我不知道爲什麼加入setData(uri)的作品,但它確實讓我有在主屏幕上的多個小部件,現在和pendingIntents是獨一無二的,像我期望的那樣開火。

爲了安全起見,我還將appWidgetId添加到intent,如果我決定允許每個設備使用多個小部件,可能稍後需要它。