【问题标题】:Android - Multiple appWidgets playing different soundsAndroid - 多个 appWidgets 播放不同的声音
【发布时间】:2010-11-19 12:56:07
【问题描述】:

我正在编写一个 android 音板,它允许用户创建多个桌面小部件,每个小部件一个声音。我正在使用一个活动让用户选择他想要为其创建小部件的声音。对于创建的每个小部件,我以

的形式存储一个共享首选项
key => "WIDGET_FILENAME_"+widgetId, value=> fileName

为了播放声音,我确实覆盖了 widgetProvider 类的 onRecieve 方法。单击桌面小部件时,它会触发向此方法的广播,该方法从 Intent 中获取小部件 id,然后加载与小部件关联的共享首选项:

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

问题是:widgetId总是一样的,不管点击哪个widget,导致播放的声音都是一样的。

对此有任何想法或指导吗?

【问题讨论】:

    标签: java android android-widget


    【解决方案1】:

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

    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);
      }
      

    【讨论】:

    • 太棒了!真的帮助我解决了同样的问题。有趣的是,不同之处在于使用 appWidgetId 作为 requestCode 而在文档中它说这从未使用过......
    • @Rabi,你有更完整的代码可以分享吗?我一直在尝试将其实现到我的代码中,但它不起作用。 stackoverflow.com/questions/10607518/…
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多