AppWidget ID在重新启动时更改

时间:2013-08-08 15:28:33

标签: android widget

像许多其他人一样,我正在使用AppWidget ID来存储每个小部件的配置。不幸的是,这些ID似乎在两个值之间波动。

基本上,以下似乎是从样本运行中发生的:

  1. 使用配置活动创建的应用小部件
  2. id = 70
  3. 10秒后通过
  4. id = 153
  5. 使用Eclipse重新启动/安装新的APK
  6. id = 70
  7. 之后它似乎不再发生变化。可能是什么导致了这个?下面是相关的代码段,我正在使用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);
    

1 个答案:

答案 0 :(得分:1)

如果您尝试以下操作会发生什么:安装应用程序,放置2个小部件,重新启动,放置另一个小部件并检查其ID?

当您从主屏幕中删除小部件并卸载应用程序时,某些ID会被重置,这可能是重复出现ID的原因。

此行为是否会影响您的应用效果和预期行为?如果没有,没有什么可担心的。

我在开发小部件时经历了同样的事情,一旦我开始工作,我的小部件从0开始有了ID ...现在我的小部件有100个ID,但是它们总是在会话中获得独特的ID该应用已安装。

如果用户卸载应用并重新安装,那么你不应该关心自己是否重复自我。

还要记住,重新启动后,再次调用AppWidgetProvider中的onEnabled()方法,所以要小心放在那里。

注意:我使用与您在代码中相同的功能和逻辑。