Android TV не запускается правильно
У меня есть приложение, которое должно работать как на телефоне, так и на телевизоре. В манифесте я указываю активность запуска телефона с
<activity
android:name=".view.phone.MainActivity"
android:launchMode="singleTop"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
и запуск телевидения с
<activity
android:name=".view.leanback.MainActivity"
android:launchMode="singleTop"
android:label="@string/app_name"
android:screenOrientation="landscape" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
Instead of filtering between LAUNCHER & LEANBACK_LAUNCHER, on either device it just goes with whichever activity is declared first in the manifest. Есть идеи, что я делаю не так?
3 ответа
Решением для меня было создать 2 конфигурации запуска следующим образом:
Для тех, кто все еще сталкивается с этой проблемой в 2022 году. Хитрость заключается в том, что запуск приложения в Android Studio ведет себя не так, как при развертывании реального файла apk на реальном устройстве. Итак, ваши шаги:
- Делайте все правильно в манифесте, как сказано в официальных документах
- Расслабьтесь и кодируйте.
Android Studio запускается всегда первым: активность с фильтрами DEFAULT & LAUNCHER или LEANBACK_LAUNCHER. Если флаг ПО УМОЛЧАНИЮ не установлен, AS просто захватит первую активность запуска, упомянутую в манифесте. Это связано с тем, что AS не может определить, на каком устройстве выполняется развертывание . Вы можете убедиться, что ваше приложение будет правильно переключать активность запуска для соответствующего устройства, создав файл apk и установив его вручную . Вот так я все это раскрыл.
Только для целей разработки вы можете либо изменить порядок действий запуска в манифесте (плохой способ), либо сделать отдельные конфигурации запуска/отладки, как описано здесь (хороший способ)
Вы используете то же имя активности MainActivity
позвонить как на телевизор, так и на телефон. Измените одно из этих имен, и у вас все получится. Как показано здесь на первом шаге, имя вашей активности для телевизора должно отличаться от имени вашей активности для телефонного приложения.