Я пишу виджет главного экрана и хочу обновить виджет главного экрана, когда ориентация устройства изменяется от портрета до среды или другого пути. Как я могу сделать его?
В настоящее время я попробовал к reigster к действию CONFIGURATION_CHANGED как код ниже, но Android не позволил мне делать это путем высказывания, что "компонентам IntentReceiver не позволяют зарегистрироваться для получения намерений". Кто-то может помочь мне?Спасибо.
public class MyWidget extends AppWidgetProvider {
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
this.registerReceiver(this, new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED));
}
Вам, вероятно, не стоит этого делать. Вы можете использовать папки layout и layout-land для предоставления различных макетов в каждой ориентации через xml без ручного определения поворота. Однако вы не должны делать что-либо функционально отличающееся в каждой ориентации, поскольку многие устройства не могут вращать рабочий стол, и любые функции, которые вы добавляете, будут для них недоступны.
Хотя я вроде как согласен с ответом jqpubliq, пока вы думаете о том, что делаете, и правильно проектируете, вы можете реализовать разные макеты для разных ориентаций. Это будет сложно.
Полученное сообщение об ошибке не требует пояснений: BroadcastReceivers
(например, AppWidgetProvider
) не могут зарегистрироваться для других широковещательных рассылок. В конце концов, зарегистрированный в манифесте экземпляр BroadcastReceiver
должен находиться в памяти миллисекунды, а не вечно.
Следовательно, чтобы реализовать эту логику, вам необходимо:
IntentService
, который обрабатывает фактические обновления виджетов приложения, и пусть ваш AppWidgetProvider
делегирует ему свою работу . Вот пример . BroadcastReceiver
, зарегистрированную в манифесте для приема широковещательной рассылки CONFIGURATION_CHANGED
намерений
. BroadcastReceiver
также использует IntentService
(например, вызовите startService ()
). IntentService
обрабатывать обновления для обеих ориентаций, исходящие от обоих приемников.