我正在编写一个Android音板,允许用户创建多个桌面小部件,每个声音一个。我正在使用一个活动让用户选择他想要创建小部件的声音。对于创建的每个窗口小部件,我以“key => "WIDGET_FILENAME_"+widgetId, value=> fileName
”的形式存储共享首选项
为了播放声音,我确实覆盖了widgetProvider类上的onRecieve
方法。单击桌面窗口小部件时,它会触发此方法的广播,从intent获取窗口小部件ID,然后加载与窗口小部件关联的共享首选项:
int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
AppWidgetManager.INVALID_APPWIDGET_ID);
问题是:widgetId始终相同,没有点击任何小部件,导致播放相同的声音。
对此有何想法或指导?
答案 0 :(得分:7)
我遇到了同样的问题并解决了这个问题:
在AppWidgetProviderClass中,按如下方式声明您的Intent:
Intent intent = new Intent(context, YourActivity.class)
.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
...和PendingIntent
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);
}
答案 1 :(得分:0)
我现在遇到了这个问题,并且该代码问题已经消失,认为Intent中的widgetAppId和新建的标志将使此Intent始终是唯一的。