2017-02-09 26 views
0

我有一個鏈接到我的應用程序中的活動的小部件。我鏈接PendingIntent此類似,所以我AppWidgetProvider內:Appwidget點擊跨多個實例的意圖

public class SampleWidget extends AppWidgetProvider { 
    @Override 
    public void onUpdate([…]) { 
     RemoteViews views = […] 

     for (int appWidgetId : appWidgetIds) { 
      final Intent intent = new Intent(context, SomeActivity.class); 
      intent.putExtra(EXTRA_KEY, extraValue); 
      final PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); 

      views.setOnClickPendingIntent(R.id.view_name, pendingIntent); 
     } 
    } 
} 

extraValue是基於內容的小部件顯示,所以它可以通過一些小部件可以共享,但並不總是被所有。我試着在這裏記錄分配的值,並且我可以確認正確的值被存儲在正確的小部件中。當我在View與ID view_name點擊任意小部件,但是,我從在啓動的活動創建(因爲手機重啓)第一配件,而不是具體的小部件我拍了拍價值的價值。看來,有可能是某種的View的單個實例以及與setOnClickPendingIntent()分配多個PendingIntent s到它導致只有第一個被用來?有沒有一種方法可以將數據附加到Intent中,而無需代碼來確定基於調用小部件顯示的內容?

+1

傳遞給'getActivity'第二個參數應該是唯一的,而不是0 – pskink

+0

這是絕對的問題!請寫一個答案,以便我可以接受它! ([關於使用'requestCode'參數的一個很好的基準的問題](https://stackoverflow.com/questions/21526319/whats-requestcode-used-for-on-pendingintent)) – RedBassett

+0

嗯,一個人在[此處] (https://stackoverflow.com/questions/21526319/whats-requestcode-used-for-on-pendingintent#comment54219506_21526319)(參考問題,你上面貼)聲稱,它不會再工作下去(22+ API),試穿API> = 22? – pskink

回答

0

正如在原來問題的意見注意到pskink,該問題是由使用0價值爲PendingIntent.getActivity()requestCode參數引起的。用一個唯一的ID(例如,窗口小部件的ID)替換它解決了問題:

final PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, intent, 0); 

這是因爲requestCode被用作一個標識符彼此區分個體PendingIntent秒。