繁体   English   中英

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

[英]Android - Multiple appWidgets playing different sounds

我正在编写一个 android 音板,它允许用户创建多个桌面小部件,每个声音一个。 我正在为用户使用一个活动来选择他想要为其创建小部件的声音。 对于创建的每个小部件,我以以下形式存储共享首选项

key => "WIDGET_FILENAME_"+widgetId, value=> fileName

要播放的声音,我没有覆盖onRecieve上widgetProvider类的方法。 单击桌面小部件时,它会触发对此方法的广播,该方法从意图中获取小部件 ID,然后加载与小部件关联的共享首选项:

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM