Android - 多个appWidgets播放不同的声音

时间:2010-11-19 12:56:08

标签: java android android-widget

我正在编写一个Android音板,允许用户创建多个桌面小部件,每个声音一个。我正在使用一个活动让用户选择他想要创建小部件的声音。对于创建的每个窗口小部件,我以“key => "WIDGET_FILENAME_"+widgetId, value=> fileName”的形式存储共享首选项 为了播放声音,我确实覆盖了widgetProvider类上的onRecieve方法。单击桌面窗口小部件时,它会触发此方法的广播,从intent获取窗口小部件ID,然后加载与窗口小部件关联的共享首选项:


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


问题是:widgetId始终相同,没有点击任何小部件,导致播放相同的声音。
对此有何想法或指导?

2 个答案:

答案 0 :(得分:7)

我遇到了同样的问题并解决了这个问题:

  1. 在AppWidgetProviderClass中,按如下方式声明您的Intent:

    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 :(得分:0)

我现在遇到了这个问题,并且该代码问题已经消失,认为Intent中的widgetAppId和新建的标志将使此Intent始终是唯一的。