Java Android-多个应用程序部件播放不同的声音

Java Android-多个应用程序部件播放不同的声音,java,android,android-widget,Java,Android,Android Widget,我正在编写一个android音板,它允许用户创建多个桌面小部件,每个声音一个。我使用一个活动让用户选择他想要为哪个声音创建小部件。对于创建的每个小部件,我以 key => "WIDGET_FILENAME_"+widgetId, value=> fileName 为了播放这些声音,我确实覆盖了widgetProvider类上的onReceive方法。单击桌面小部件时,它会触发对此方法的广播,该方法从intent中获取小部件id,然后加载与小部件关联的共享首选项:

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

key => "WIDGET_FILENAME_"+widgetId, value=> fileName
为了播放这些声音,我确实覆盖了widgetProvider类上的
onReceive
方法。单击桌面小部件时,它会触发对此方法的广播,该方法从intent中获取小部件id,然后加载与小部件关联的共享首选项:

int appWidgetId =  intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                                     AppWidgetManager.INVALID_APPWIDGET_ID);
问题是:无论单击哪个小部件,widgetId总是相同的,导致播放相同的声音


对此有什么想法或指导吗?

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

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

    Intent intent = new Intent(context, YourActivity.class)
            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    
  • …和吊坠

    PendingIntent pi = PendingIntent.getActivity(context, appWidgetId, intent,
                                                 PendingIntent.FLAG_UPDATE_CURRENT);
    
  • 在Activity类中,获取要更新的appWidgetId后:

    int currentWidgetId = this.getIntent().getIntExtra(
           AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    
  • …您可以使用与此类似的功能:

    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始终是唯一的。

    太棒了!真的帮我解决了同样的问题。有趣的是,区别在于使用appWidgetId作为请求代码,而在文档中它说这从来没有被使用过…@Rabi,你有更完整的代码可以共享吗?我一直试图在我的代码中实现这一点,但它就是不起作用。