Android - Multiple appWidgets playing different sounds

纵然是瞬间 提交于 2019-12-21 17:22:14

问题


I'm writing an android soundboard wich allow the user to create multiple desktop widgets, one for each sound. I'm using an activity for the user to choose wich sound he wants to create the widget for. For each widget created i store a shared preference in the form of
key => "WIDGET_FILENAME_"+widgetId, value=> fileName
To play the sounds, i did override the onRecieve method on the widgetProvider class. When the desktop widget is clicked, it triggers a broadcast to this method, wich gets the widget id from the intent and then loads the shared preference associated with the widget:


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


The problem is: The widgetId is always the same, no mather wich widget is clicked, causing the same sound to be played.
Any idea or guidance on this?


回答1:


I had the same problem and solved it like this:

  1. In your AppWidgetProviderClass, declare your Intent as follows:

    Intent intent = new Intent(context, YourActivity.class)
            .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
            .putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
    
  2. ...and PendingIntent

    PendingIntent pi = PendingIntent.getActivity(context, appWidgetId, intent,
                                                 PendingIntent.FLAG_UPDATE_CURRENT);
    
  3. In the Activity class, after getting the appWidgetId you want to update:

    int currentWidgetId = this.getIntent().getIntExtra(
           AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
    
  4. ...you can use a function similar to this one:

    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:


I had this Problem right now and with that code the problem is gone, Think that the widgetAppId in the Intent and the flag Create new will make this Intent always unique.



来源:https://stackoverflow.com/questions/4225197/android-multiple-appwidgets-playing-different-sounds

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!