什么属性会决定编译出来的安卓是 TV 还是手机

2020-07-27 14:45:14 +08:00
 SupperMary

偶然发现一个 app 在手机上和 TV 上布局不一样。 能找到的 app 判断是否运行在 TV 上的代码只有这么一段:

UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);

if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION)
{  是 tv } 
else 
{ 不是 tv }

但是从网上搜索编译安卓 TV 的资料寥寥无几,想问一下哪些编译参数会决定编译出来的安卓是 TV 还是手机

7492 次点击
所在节点    Android
19 条回复
greed1is9good
2020-07-27 14:57:51 +08:00
屏幕参数吧
zhiyzellda
2020-07-27 15:25:18 +08:00
也有可能是机型和系统,我也发觉某个 App 在盒子上与在电视自带系统上显示不同。环境是创维电视酷开系统,盒子是类原生系统。像酷开&小米&智慧屏之类的应该是直接判断系统的吧,因为手机不可能安装电视独有系统。这其实跟 AppStore 判断你是 AppleTV 还是 iPad 是一样的原理。
完善的 App 是三个要素同时判断 1.屏幕 2.机型 3.搭载的系统 。

它是直接写了两款 UI,判断到电视就隐藏手机 UI,是手机就隐藏电视 UI 。是打开 app 时判断的,安装的时候大多数是两套 UI 一起装进去的,这时候不会判断。
coderluan
2020-07-27 15:27:22 +08:00
楼主这搜索能力有待提高啊, 我不是做安卓的, 好奇就搜了下, 发现官方文档就有说明:

https://developer.android.com/training/tv/start/start
love
2020-07-27 16:25:36 +08:00
SupperMary
2020-07-27 17:30:24 +08:00
@coderluan 感谢答复。 其实我的意思是编译安卓系统的时候,哪些参数会表示编译出来的系统是 TV 还是手机或者手表之类的。 这一部分内容在网上确实没找到哈
kop1989
2020-07-27 17:37:37 +08:00
编译出来的是 TV 还是手机????
你确定你想清楚了么?
apk 的基本要求就是自适应所有允许安装的安卓平台。
为不同平台输出不同 apk,是一种开发流程上的简化,相对而言舍弃的就是用户需要针对平台安装不同版本的 apk 。
coderluan
2020-07-27 17:47:14 +08:00
@SupperMary 用 apkanalyzer 分析下 apk 文件, 然后还是查看下官方文档的那些内容是哪种, 或者是兼容的.
LLaMA2
2020-07-27 17:55:38 +08:00
一种是分应用,即手机和 TV 上的 App 有差异,以中是集成在一起,代码中根据设备形态决定显示何种 UI,实际上 TV 上的 App 无非就是不需要触控,适配遥控器的各种按键动作,你想一下,手机上可没有上一个频道下一个频道,但是 TV 上有,是不是该有对应的逻辑处理这个东西,就好比手机上你可能会处理一些手势,明白了吗?小老弟
dying4death
2020-07-27 18:29:13 +08:00
我怎么觉得楼主说的是 ROM
VDimos
2020-07-27 18:29:50 +08:00
@SupperMary 这不分仓库构建的吗
SupperMary
2020-07-27 18:54:10 +08:00
@dying4death 华生,你抓住了盲点。👍
SupperMary
2020-07-27 18:55:57 +08:00
@kop1989 可能问题里的描述有写误导性。我的意思是编译出来的 ROM 是 TV 还是手机哈
SupperMary
2020-07-27 19:00:07 +08:00
@ye4tar 老哥我的意思是编译出来的安卓系统是 TV 还是手机哈
sunrain
2020-07-29 10:09:08 +08:00
```
<uses-feature android:name="android.hardware.type.television" android:required="true" />
```
systemcall
2020-07-31 14:26:15 +08:00
见到不少国产安卓电视和盒子说自己是平板
zhiyzellda
2020-07-31 19:10:47 +08:00
@systemcall 因为对 AndroidTV 的源码进行魔改的难度很高吧。平板源码的魔改难度会低很多,包括删掉 Google 生态之类的。AndroidTV 源码想要无痛去掉 Google 生态的工作量可能非常大。
SupperMary
2020-07-31 22:08:40 +08:00
@zhiyzellda AOSP 里面的编译选项本身就没有安卓 TV 的编译选项。再加上链接

https://developer.android.com/guide/topics/resources/providing-resources#UiModeQualifier
里面提及的 “television:设备正在通过电视显示内容,通过将界面投影到离用户较远的大屏幕上,为用户提供“十英尺”体验。主要面向遥控交互或其他非触控式交互”。

其实我自己是偏向于安卓会根据运行的硬件来决定自己到底是不是一个 TV 的。只是有关的资料没有找到。
SupperMary
2021-10-09 12:51:39 +08:00
@sunrain 正解,位置在 /system/etc/permission 或者 /syste/etc/sysconfig/ 下面的 xml 里面
Modificator
2022-04-20 16:19:20 +08:00
<!-- Control the default UI mode type to use when there is no other type override
happening. One of the following values (See Configuration.java):
1 UI_MODE_TYPE_NORMAL
4 UI_MODE_TYPE_TELEVISION
5 UI_MODE_TYPE_APPLIANCE
Any other values will have surprising consequences. -->
<integer name="config_defaultUiModeType">4</integer>

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/693448

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX