Как включить Ambient Mode (Always On) в FragmentActivity в приложении Android Wear?

У меня есть приложение для Android Wear, которое содержит FragmentActivity:

public class MyFragmentActivity extends FragmentActivity

С 2 фрагментами:

public class MyFirstFragment extends Fragment

и

public class MySecondFragment extends Fragment

Я хочу включить окружающий режим (всегда включен) в этом фрагменте. Однако, согласно документации, окружающий режим доступно, только если я продлю WearableActivity.

Есть ли способ объединить оба свойства FragmentActivity и WearableActivity в одном?

or

Есть ли другой способ включить фоновый режим в FragmentActivity?


person Moataz Mekki    schedule 10.06.2016    source источник
comment
Да, расширьте FragmentActivity и реализуйте AmbientMode.AmbientCallbackProvider.   -  person DiscDev    schedule 14.07.2018


Ответы (3)


Вы должны реализовать AmbientModeSupport.AmbientCallbackProvider вместо WearableActivity, тогда вы можете вместо этого расширить FragmentActivity.

Это новый предпочтительный метод, и он по-прежнему дает вам все преимущества, которые вы получили с WearableActivity, но также позволяет вам использовать Activity (или любые подклассы... FragementActivity и т. д.).

Подробности (и пример кода) указаны в официальных документах.

Обновление: теперь используйте AmbientModeSupport вместо AmbientMode. Google недавно изменил название, поэтому старая версия устарела.

person codingjeremy    schedule 25.10.2017
comment
Знаете ли вы, можно ли включить окружающий режим только для некоторых фрагментов, а не для всех? Я хочу, чтобы только несколько фрагментов поддерживали окружающий режим, а другие должны просто закрыть приложение, как обычно. - person Thomas Vos; 31.07.2018
comment
Обычно вы включаете поддержку окружения в FragmentActivity в onCreate() с помощью AmbientModeSupport.attach(this). Вместо этого вы можете создать настраиваемый интерфейс, который должен реализовывать Activity, который запускает подключение/отключение (AmbientModeSupport) для включения/отключения окружающего мира. В своих фрагментах вы можете проверить, что родительская активность относится к этому пользовательскому интерфейсу (если это не так, выдайте ошибку) и сохраните ссылку. Затем вы можете таким образом активировать режим окружения для интерфейса с каста. Это должно сработать. - person codingjeremy; 02.08.2018
comment
Кстати, если это поможет, вы можете настроить собственный интерфейс, который должны реализовать фрагменты, чтобы сообщать фрагментам об обновлении экрана для окружения (onEnterAmbientFragment, onExitAmbientFragment и т. д.). Ваша активность будет хранить ссылку для запуска обновлений в каждом фрагменте, когда активность получает обратные вызовы (onEnterAmbient, onExitAmbient и т. д.). Вы можете использовать это в сочетании с приведенным выше решением. - person codingjeremy; 02.08.2018
comment
Спасибо, это действительно полезно. Это похоже на лучший способ, но я не смог найти способ отсоединить AmbientModeSupport. Поэтому, когда я включаю поддержку окружающего режима, я не знаю, как снова ее отключить. Ты знаешь как? - person Thomas Vos; 05.08.2018
comment
AmbientModeSupport имеет метод detach() (см. ссылку ниже). :) Я бы предположил, что работает. Я решил, что метод attach() включает окружающий режим, поэтому... detach() должен отключить его, хотя вам придется попробовать. developer.android.com/reference/android/ поддержка/одежда/окружающая среда/ - person codingjeremy; 06.08.2018

Ответ на оба вопроса нет, извините.

Амбиентный режим включается вызовом WearableActivity.setUseAmbient(), который, очевидно, недоступен, если вы не расширяете WearableActivity. А так как Java не поддерживает множественное наследование, вы не можете одновременно создавать подклассы WearableActivity и FragmentActivity — либо одно, либо другое.

Вам действительно нужно использовать фрагменты для просмотра? Если вы действительно хотите поддерживать эмбиентный режим, вам, вероятно, нужно подумать о перемещении вашего пользовательского интерфейса из фрагментов.

person String    schedule 11.06.2016

Если вы хотите использовать Fragments на Android Wear и поддерживать режим Ambient, вам нужно использовать класс AmbientModeSupport.

Сделайте так, чтобы ваша деятельность расширяла FragmentActivity и реализовывала AmbientModeSupport.AmbientCallbackProvider, и все готово!

Подробности и примеры здесь: https://developer.android.com/training/wearables/apps/always-on#ambient-mode-class

person DiscDev    schedule 13.07.2018