2010-11-19 51 views
5

我正在寫一個android音板,允許用戶創建多個桌面小部件,每個聲音一個。我正在使用一項活動讓用戶選擇他想要創建小部件的極其合適的聲音。對於創建的每個小部件,我以

的形式存儲共享首選項。要播放聲音,我沒有覆蓋widgetProvider類中的onRecieve方法。當點擊桌面組件,就會觸發這個方法廣播,至極從意圖獲取控件ID,然後加載與小部件關聯的共享偏好:
Android - 多個appWidgets播放不同的聲音

 

int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 
            AppWidgetManager.INVALID_APPWIDGET_ID); 

 

的問題是:在爲widgetid是總是一樣,沒有任何東西點擊,導致相同的聲音播放。
對此有何想法或指導?

回答

7

我有同樣的問題,解決它像這樣:

  1. 在你AppWidgetProviderClass,聲明你的意圖如下:

    Intent intent = new Intent(context, YourActivity.class) 
         .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) 
         .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); 
    
  2. ...和的PendingIntent

    PendingIntent pi = PendingIntent.getActivity(context, appWidgetId, intent, 
                  PendingIntent.FLAG_UPDATE_CURRENT); 
    
  3. 在Activity類中,獲取appWidgetId後,您想要日期:

    int currentWidgetId = this.getIntent().getIntExtra(
         AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID); 
    
  4. ...您可以使用類似這樣的一個功能:

    private void updateWidgetView() { 
        views = new RemoteViews(YourWidget.class.getPackage().getName(), 
              R.layout.main_widget); 
        mgr = AppWidgetManager.getInstance(this); 
        views.setTextViewText(R.id.some_text_view, someText); 
        // Tell the AppWidgetManager to perform an update on the current App Widget 
        mgr.updateAppWidget(currentWidgetId, views); 
    } 
    
+1

太棒了!真的幫助我解決了同樣的問題。有趣的部分是,使用appWidgetId作爲requestCode的原因在於,它在文檔中說這是從未使用過的...... – Muzikant 2011-07-08 07:14:23

+0

@Rabi,你有更完整的代碼可以共享嗎?我一直在試圖將其實施到我的代碼,它只是不工作。 http://stackoverflow.com/questions/10607518/android-appwidget-multiple-instances – MrGibbage 2012-05-16 08:48:42

0

我現在並與代碼的問題是去了這個問題,想那Intent中的widgetAppId和標誌Create new將使這個Intent始終是唯一的。