2013-08-08 3 views
0

Как и многие другие люди, я использую идентификаторы AppWidget для хранения конфигурации для каждого виджета. К сожалению, эти идентификаторы колеблются между двумя значениями.Идентификатор AppWidget при перезагрузке

В основном, следующий по-видимому, происходит из образца перспективе:

  1. App виджет создан с активностью конфигурации
  2. ID = 70
  3. 10 секунд передать
  4. ID = 153
  5. Перезагрузка/установка нового APK с Eclipse
  6. id = 70

После этого он больше не меняется. Что может быть причиной этого? Ниже приведены соответствующие фрагменты кода. Я печатаю идентификатор виджета приложения из службы обновлений, запланированной с помощью AlarmManager.

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

Что произойдет, если вы попытаетесь следующую вещь: Установить приложение, 2 место виджеты, перезагрузки, установить другой виджет и проверить его идентификатор ?

Когда вы удаляете виджеты с главного экрана и удаляете приложение, некоторые идентификаторы сбрасываются, и это может быть причиной повторяющихся идентификаторов.

Также влияет ли это на производительность вашего приложения и ожидаемое поведение? Если нет, не о чем беспокоиться.

У меня возникло то же самое при разработке виджетов, как только я начал работу с моими виджетами, начиная с 0,1 .... теперь мои виджеты имеют идентификаторы 100, но они всегда получают уникальные идентификаторы в сеансе в которое приложение установлено.

Вы не должны заботиться о том, повторяют ли идентификаторы, если пользователь удаляет приложение и устанавливает его снова.

Также имейте в виду, что после перезагрузки метод onEnabled() из AppWidgetProvider вызывается снова, поэтому будьте осторожны, что вы там положили.

Примечание: я использую те же функции и логику, что и в вашем коде.

+0

Спасибо, что подтвердили, что мой код в порядке. Сегодня я начал отлаживать, и оказалось, что идентификатор моего виджета не менялся. Проблема заключалась в том, что Android дает 2 идентификатора виджета, когда есть только один виджет. Я не знаю, откуда этот второй идентификатор, но это привело к сбою службы обновления виджета, потому что для этого не было данных. Теперь я проигнорировал эти «плохие виджеты», и проблема, похоже, решена. – Overv

Смежные вопросы