【发布时间】:2015-04-02 01:29:56
【问题描述】:
是否可以创建一个适用于电视和移动设备的通用 Android 应用,但具有不同的主要活动、主题、样式等?
我尝试将活动添加到 Mainfest 文件:
<application
... >
<!-- Mobile -->
<activity
...>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- TV -->
<activity
...
android:theme="@style/Theme.Leanback">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LEANBACK_LAUNCHER" />
</intent-filter>
</activity>
</application>
但据我了解,我不能有 2 个“android.intent.action.MAIN”活动?
当在 Android Studio 中启动新项目并选择移动和电视作为支持的“外形尺寸”时,它会创建带有 2 个独立模块的项目,所以实际上这些是 2 个独立的应用程序,对吧?但我希望能够在他们之间共享 90% 的代码。我该怎么做?
提前致谢。
【问题讨论】:
-
“但据我所知,我不能有 2 个“android.intent.action.MAIN”活动?” ——一般来说,你可以。如果您愿意,您可以拥有 1,000 个。我们认为是谷歌地图的应用程序通常有三个:地图、街景和导航。你当然可以创建a single app that works on Android TV and on mobile devices。在您的情况下,一个 IDE 代码的一组文件模板为您生成了两个模块。这并不意味着这是唯一可能的解决方案。
-
现在,在我的例子中,我对所有形式因素都使用了一个启动器活动,并且我没有通过 Play 商店分发应用程序。
-
@CommonsWare 好的,假设我有 2 个 .MAIN 活动,就像我的问题一样。您如何看待,如果我按下 Android TV (Lollipop) 上的 App 图标会启动什么活动。我敢打赌,你认为那个是“android.intent.category.LEANBACK_LAUNCHER”,但不是!第一个带有“android.intent.action.MAIN”的出现了!为什么?
-
我认为这是 Android TV 主屏幕实现中的一个错误。
LEANBACK_LAUNCHER后面的 point 表示应该出现在 Android TV 主屏幕启动器中的活动。您可能需要做的是有一个MAIN活动,具有两个类别(LAUNCHER、LEANBACK_LAUNCHER),设置为Theme.NoDisplay。该活动可以使用hasSystemFeature()来检测它是否在电视上,然后启动相应的活动。顺便说一句,您在哪个 Android TV 上进行测试? ADT-1?连结播放器?还有什么? -
@CommonsWare 感谢您的帮助!我正在使用 Nexus 播放器。我将使用 Manifest 文件进行更多测试,并让您知道结果。谢谢。
标签: android android-activity android-manifest android-5.0-lollipop nexus-player