Только несколько экземпляров только для виджетов Обновление последнего виджета
У меня есть WidgetProvider и настройка активности
Когда Widget запускается, он начинается с активности configure, и я его настраиваю, создавая специальный вызов widgetprovider
(что вы заметите из примеров учебников sdk)
- ListView с интерактивным / редактируемым виджетами
- Как исправить ошибку «процесс - это плохо» для Android-виджета?
- Возможно ли для TextView Marquee в виджетах расширить приложение AppWidgetProvider?
- Как создать пользовательскую кнопку в Android с помощью стилей XML
- Виджеты не реагируют при повторном добавлении кода
// Push widget update to surface with newly set prefix AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); AwarenessWidget.updateAppWidget(context, appWidgetManager, mAppWidgetId, position); // Make sure we pass back the original appWidgetId Intent resultValue = new Intent(); resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, mAppWidgetId); setResult(RESULT_OK, resultValue); finish();
Я передаю идентификатор виджета функции … внутри виджета я создаю намерение следующим образом:
Intent configIntent = new Intent(context, Configure.class); configIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); PendingIntent pendingIntent = PendingIntent.getActivity (context, 0, configIntent, PendingIntent.FLAG_UPDATE_CURRENT); views.setOnClickPendingIntent(R.id.MainImage,pendingIntent); views.setImageViewResource(R.id.MainImage, lv_images[version]); appWidgetManager.updateAppWidget(appWidgetId, views);
Я всегда ссылаюсь на идентификатор виджета и даже добавляю его в дополнение к намерению, но когда я получаю два из этих виджетов на главном экране, идентификатор виджетов всегда ссылается на последний размещенный идентификатор виджетов
- Установите прозрачный фон изображения на Android
- Как отключить элементы в представлении списка?
- Android Home Screen Widget (значок, стиль ярлыка)
- Анимация в панели уведомлений Пользовательский вид
- Есть ли простой способ нанести удар по тексту в виджетах приложения?
- как получить html-контент из веб-представления?
- Как удалить вкладку из TabHost
- Сбой транзакции связывания при динамическом размещении растрового изображения в виджетах
У меня была аналогичная проблема. Просто добавьте это в свою конфигурационную деятельность, где вы установите PendingIntent:
Uri data = Uri.withAppendedPath( Uri.parse(URI_SCHEME + "://widget/id/") ,String.valueOf(appWidgetId)); intent.setData(data);
Переменная URI_SCHEME является строкой и может быть любой, что вам хотелось бы … т.е. – «ABCD». Это заставляет каждого виджета иметь уникальный PendingIntent.
Ниже приведено более подробное объяснение того, почему ваш код не работает и как его исправить. Из документации Android SDK:
Сам PendingIntent – это просто ссылка на токен, поддерживаемый системой, описывающей исходные данные, используемые для ее получения. Это означает, что, даже если процесс его приложения будет уничтожен, сам PendingIntent останется пригодным для других процессов, которые ему были предоставлены. Если впоследствии приложение-создатель повторно извлекает один и тот же вид PendingIntent (та же операция, то же действие, данные, категории и компоненты Intent, и те же флаги), он получит PendingIntent, представляющий тот же токен, если он все еще действителен, и может поэтому отмените (), чтобы удалить его.
Из-за этого поведения важно знать, когда два намерения считаются одинаковыми для целей получения PendingIntent. Обычная ошибка, которую делают люди, заключается в создании нескольких объектов PendingIntent с Intents, которые изменяются только в их «лишнем» содержимом, ожидая, что каждый раз будет получать другой PendingIntent. Этого не происходит. Части намерения, которые используются для сопоставления, являются теми же, что определены Intent.filterEquals. Если вы используете два объекта Intent, которые эквивалентны Intent.filterEquals, вы получите тот же PendingIntent для обоих из них.
Обратите внимание, что указание различного «дополнительного» содержимого недостаточно для того, чтобы PendingIntents считались уникальными, но установка уникального URI с помощью setData. Вот почему решение URI Snailer «волшебным образом» устраняет проблему.
Документация также предлагает другое (возможно более простое) решение проблемы. Вместо создания пользовательского URI просто установите уникальный код запроса, когда вы вызываете getActivity:
PendingIntent pendingIntent = PendingIntent.getActivity(context, appWidgetId, configIntent, PendingIntent.FLAG_UPDATE_CURRENT);
Источник: http://developer.android.com/reference/android/app/PendingIntent.html
В моем тестировании использование setData (…) в PendingIntent не устраняет проблему на Verizon Thunderbolt под управлением Android 4.0.4. Он работает на моих других тестовых устройствах и эмуляторе.
Вместо этого я тестировал использование requestCode, и он работает во всех случаях. Я просто установил requestCode как идентификатор виджетов:
pendingIntent = PendingIntent.getService(context, appWidgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);