Простая проблема с намерением дополнений
-
22-07-2019 - |
Вопрос
Опубликовано: понедельник, 30 ноября 2009 г., 17:08 Заголовок сообщения: Простая проблема с дополнительными возможностями Здравствуйте,
Я работаю над виджетом приложения для домашнего экрана. Я пытаюсь сделать так, чтобы, когда пользователь нажимает на виджет, он изменяет данные, отображаемые в виджете. Однако я также разрешаю открывать несколько экземпляров виджетов с разными данными. Поэтому, чтобы сообщить моему методу, какой виджет обновлять, я добавляю дополнительный элемент к намерению, которое запускается для изменения данных. Р>
Вот мое намерение: Java:
Intent changeData = new Intent("com.tonycosentini.mintdroid.CHANGE_DATA");
changeData.putExtra("widget_id", currentWidgetId);
PendingIntent changeDataPendingIntent = PendingIntent.getBroadcast(this, 0, changeData, 0);
//This will return the correct value, but if I call it in my onreceive() method it won't.
Log.v(TAG, "stored id is: " + changeData.getIntExtra("widget", 0);
Это правильно хранит идентификатор виджета, но когда вызывается метод изменения данных, идентификатор виджета, который читается из намерения, является первым экземпляром виджета. То есть существует цикл for, который генерирует все виджеты, и независимо от того, к какому виджету вы прикоснетесь, полученный идентификатор виджета всегда является первым идентификатором виджета в первом виджете. Р>
У кого-нибудь есть идеи, как это решить? Надеюсь, я не сказал это слишком плохо. Р>
Спасибо за чтение, Тони
Решение
Это известная проблема с PendingIntents; когда Android сравнивает PendingIntents, он не сравнивает дополнения Intent, поэтому вы не можете запланировать одно и то же базовое Intent несколько раз только с разными дополнениями. Прямо сейчас вы можете решить эту проблему, только сделав Intent уникальным, отличным от дополнительных, например добавив дополнительную информацию к данным Intent.
Об этом немного поговорим в группе Google Android: http://groups.google.com/group/android-developers/browse_thread/thread/81100da6ddb21136 р>