A немного смутите разницу между Контекстом Виджета и Контекстом приложения: Что касается проблемы, связанной с неспособной зарегистрировать новый BroadcastReceiver через исходный код реализации Android Widget (Ref.1)
По соображениям удобочитаемости я копирую свой ответ, как показано ниже: ★ Проблема Генри (Ref.1):
Я создаю виджет, который нуждается в широковещательный приемник, такой как com.example.android.apis.appwidget.ExampleBroadcastReceiver. Однако в этом примере Intent.ACTION_TIMEZONE_CHANGED в манифест, но есть некоторые, которые делают не допускайте этого
Например, Intent.ACTION_TIME_TICK говорит: "Вы не можете получить это через компоненты, объявленные в манифесте, только путем неявной регистрации для него Context.registerReceiver()."
Итак, я удалил объявления манифеста и попытался заменить Функция AppWidgetProvider.onEnabled это было в примере с вызовом как показано ниже: context.registerReceiver(myReceiver, новый IntentFilter (Intent.ACTION_TIME_TICK));
(где "myReceiver" - это пример получателя я хочу.) Однако, когда я попробуйте запустить код, я получаю следующая ошибка:
Не удалось запустить приемник... android.content.ReceiverCallNotAllowedException: Компоненты IntentReceiver не являются разрешено регистрироваться для получения намерений
★ Наш анализ этой проблемы и решение этой проблемы (Ref.1)
Это результат после исследования этого проблема, я был успешным обработчиком вопрос. Поэтому я собираю как отчет для обмена с разработчиком Android. Надеюсь, что это поможет.
Вот результат:
❶ISSUE: * Относительно ограничений от Widget, когда пытаетесь зарегистрироваться BroadcastReceiver через явный источник код: (Нет эффекта при регистрации BroadcastReceiver через Manifest.xml)
❷EXAMPLE: * BroadcastReceiver: сообщение ACTION_TIME_TICK - одно Например: поскольку документы от Android были укажите: "Вы не можете получить это через компоненты, объявленные в проявляется, только экслитически регистрируя для него Context.registerReceiver()." (Ref.1)
❸PREVIOUS SOLUTION: * Code Snippet: context.registerReceiver(это, intentName); (1)
❹ERROR при использовании 3 ★ решения * Когда реализация следовать (1), он, хотя исключение: android.content.ReceiverCallNotAllowedException: Компоненты IntentReceiver не являются разрешено регистрироваться для получения намерений
★ Хорошая новость для всех, кто нуждается в зарегистрируйтесь BroadcastReceiver в виджет:) МОЖЕТ зарегистрироваться BroadcastReceiver
❺ НАШЕ РЕШЕНИЕ: * Но мы можем исправить это с помощью используемого контекста приложения вместо контекста виджетов (*) Код Snippet: context.getApplicationContext.registerReceiver(это, intentName);
❻REFERENCE: * http://developer.android.com/reference/android/content/Intent.html#AC... Что касается
❼TARGET ENVIRONEMNT: * SDK 2.3, как на эмуляторе, так и на NexusOne 2.3, If любой успех с этим решением обновите наш отчет
❽NOTES * Может быть разница между Контекстным объектом виджета и приложение, но я до сих пор не знаю именно причина этой проблемы.
Пожалуйста, дайте мне знать, если у вас есть лучшее решение или объяснить больше ясно
Также я решил эту проблему, но я до сих пор не известны точно причины эта проблема.
Пожалуйста, дайте мне знать, если у вас есть лучшее решение или объяснить больше ясно
★ CONCLUTION:
● NG: при использовании контекста виджета для регистрации BroadcastReceiver
context.registerReceiver(this, intentName);
- > он думал, что исключение:
Unable to start receiver...android.content.ReceiverCallNotAllowedException: IntentReceiver components are not allowed to register to receive intents
● ОК: при использовании контекста приложения все работает нормально:
ontext.getApplicationContext.registerReceiver(this, intentName);
★ ВОПРОС: Также наше решение может решить проблему: "невозможно зарегистрировать новое широковещательное сообщение через исходный код приложения Android-виджета".
Но я все еще отношусь к двум Qestion:
Вопрос ❶: Разница между Контекстом Виджета и Контекстом приложения и другим объектом Контекста (Контекст активности) '
Вопрос. Поскольку контекстный объект обычно использовался, когда использовать контекст приложения и когда использовать другой контекст.
Для ❷ я нашел объяснение, связанное с утечкой памяти (ссылка 2), но я думаю, что этого может быть недостаточно (Ref.2)
Итак, если у вас есть ответ, пожалуйста, сообщите мне, любой ответ оценили.
Спасибо
★ Referecens:
(2) http://developer.android.com/resources/articles/avoiding-memory-leaks.html