代码之家  ›  专栏  ›  技术社区  ›  marcosbeirigo

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

  •  5
  • marcosbeirigo  · 技术社区  · 14 年前

    我正在写一个android声卡,允许用户创建多个桌面小部件,每个声音一个。我正在使用一个活动让用户选择要为其创建小部件的wich声音。对于创建的每个小部件,我以
    key => "WIDGET_FILENAME_"+widgetId, value=> fileName
    为了播放声音,我确实覆盖了 onRecieve 方法。单击桌面小部件时,它会触发对此方法的广播,wich从意图获取小部件id,然后加载与小部件关联的共享首选项:

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

    问题是:widgetId始终是相同的,没有单击mather wich小部件,导致播放相同的声音。
    对此有什么想法或指导吗?

    2 回复  |  直到 11 年前
        1
  •  7
  •   sth Wojciech Parzych    13 年前

    我也遇到了同样的问题,就这样解决了:

    1. 在AppWidgetProviderClass中,声明您的意图如下:

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

      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);
      }
      
        2
  •  0
  •   prdatur    13 年前

    我现在遇到了这个问题,有了这个代码,问题就消失了,认为Intent中的widgetAppId和Create new标志将使这个Intent始终是唯一的。