像许多其他人一样,我正在使用AppWidget ID来存储每个小部件的配置。不幸的是,这些ID似乎在两个值之间波动。
基本上,以下似乎是从样本运行中发生的:
之后它似乎不再发生变化。可能是什么导致了这个?下面是相关的代码段,我正在使用AlarmManager
计划的更新服务打印应用小部件ID。
的AppWidgetProvider
service = PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);
配置活动
Bundle extras = getIntent().getExtras();
int widgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
AppWidgetManager widgetManager = AppWidgetManager.getInstance(this);
ComponentName widget = new ComponentName(getPackageName(), WidgetConfigActivity.class.getName());
int[] widgetIds = widgetManager.getAppWidgetIds(widget);
// Store the configuration for this widget
SharedPreferences.Editor prefsEdit = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit();
// Some settings here
prefsEdit.commit();
// Send initial update request
Intent initialUpdate = new Intent(this, WidgetProvider.class);
initialUpdate.setAction("android.appwidget.action.APPWIDGET_UPDATE");
initialUpdate.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIds);
sendBroadcast(initialUpdate);
答案 0 :(得分:1)
如果您尝试以下操作会发生什么:安装应用程序,放置2个小部件,重新启动,放置另一个小部件并检查其ID?
当您从主屏幕中删除小部件并卸载应用程序时,某些ID会被重置,这可能是重复出现ID的原因。
此行为是否会影响您的应用效果和预期行为?如果没有,没有什么可担心的。
我在开发小部件时经历了同样的事情,一旦我开始工作,我的小部件从0开始有了ID ...现在我的小部件有100个ID,但是它们总是在会话中获得独特的ID该应用已安装。
如果用户卸载应用并重新安装,那么你不应该关心自己是否重复自我。
还要记住,重新启动后,再次调用AppWidgetProvider中的onEnabled()方法,所以要小心放在那里。
注意:我使用与您在代码中相同的功能和逻辑。