Как обнаружить изменение ориентации в виджете главного экрана?

Я пишу виджет главного экрана и хочу обновить виджет главного экрана, когда ориентация устройства изменяется от портрета до среды или другого пути. Как я могу сделать его?

В настоящее время я попробовал к 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));
    }
5
задан user256239 12 March 2010 в 20:10
поделиться

2 ответа

Вам, вероятно, не стоит этого делать. Вы можете использовать папки layout и layout-land для предоставления различных макетов в каждой ориентации через xml без ручного определения поворота. Однако вы не должны делать что-либо функционально отличающееся в каждой ориентации, поскольку многие устройства не могут вращать рабочий стол, и любые функции, которые вы добавляете, будут для них недоступны.

3
ответ дан 18 December 2019 в 13:13
поделиться

Хотя я вроде как согласен с ответом jqpubliq, пока вы думаете о том, что делаете, и правильно проектируете, вы можете реализовать разные макеты для разных ориентаций. Это будет сложно.

Полученное сообщение об ошибке не требует пояснений: BroadcastReceivers (например, AppWidgetProvider ) не могут зарегистрироваться для других широковещательных рассылок. В конце концов, зарегистрированный в манифесте экземпляр BroadcastReceiver должен находиться в памяти миллисекунды, а не вечно.

Следовательно, чтобы реализовать эту логику, вам необходимо:

  1. Создать IntentService , который обрабатывает фактические обновления виджетов приложения, и пусть ваш AppWidgetProvider делегирует ему свою работу . Вот пример .
  2. Создайте отдельную реализацию BroadcastReceiver , зарегистрированную в манифесте для приема широковещательной рассылки CONFIGURATION_CHANGED намерений .
  3. Пусть этот новый BroadcastReceiver также использует IntentService (например, вызовите startService () ).
  4. Попросите IntentService обрабатывать обновления для обеих ориентаций, исходящие от обоих приемников.
2
ответ дан 18 December 2019 в 13:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: