偶然发现一个 app 在手机上和 TV 上布局不一样。 能找到的 app 判断是否运行在 TV 上的代码只有这么一段:
UiModeManager uiModeManager = (UiModeManager) getSystemService(UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION)
{ 是 tv }
else
{ 不是 tv }
但是从网上搜索编译安卓 TV 的资料寥寥无几,想问一下哪些编译参数会决定编译出来的安卓是 TV 还是手机
1
greed1is9good 2020-07-27 14:57:51 +08:00 via Android 1
屏幕参数吧
|
2
zhiyzellda 2020-07-27 15:25:18 +08:00 via Android 1
也有可能是机型和系统,我也发觉某个 App 在盒子上与在电视自带系统上显示不同。环境是创维电视酷开系统,盒子是类原生系统。像酷开&小米&智慧屏之类的应该是直接判断系统的吧,因为手机不可能安装电视独有系统。这其实跟 AppStore 判断你是 AppleTV 还是 iPad 是一样的原理。
完善的 App 是三个要素同时判断 1.屏幕 2.机型 3.搭载的系统 。 它是直接写了两款 UI,判断到电视就隐藏手机 UI,是手机就隐藏电视 UI 。是打开 app 时判断的,安装的时候大多数是两套 UI 一起装进去的,这时候不会判断。 |
3
coderluan 2020-07-27 15:27:22 +08:00 1
|
4
love 2020-07-27 16:25:36 +08:00 1
|
5
SupperMary OP @coderluan 感谢答复。 其实我的意思是编译安卓系统的时候,哪些参数会表示编译出来的系统是 TV 还是手机或者手表之类的。 这一部分内容在网上确实没找到哈
|
6
kop1989 2020-07-27 17:37:37 +08:00 1
编译出来的是 TV 还是手机????
你确定你想清楚了么? apk 的基本要求就是自适应所有允许安装的安卓平台。 为不同平台输出不同 apk,是一种开发流程上的简化,相对而言舍弃的就是用户需要针对平台安装不同版本的 apk 。 |
7
coderluan 2020-07-27 17:47:14 +08:00 1
@SupperMary 用 apkanalyzer 分析下 apk 文件, 然后还是查看下官方文档的那些内容是哪种, 或者是兼容的.
|
8
LLaMA2 2020-07-27 17:55:38 +08:00 1
一种是分应用,即手机和 TV 上的 App 有差异,以中是集成在一起,代码中根据设备形态决定显示何种 UI,实际上 TV 上的 App 无非就是不需要触控,适配遥控器的各种按键动作,你想一下,手机上可没有上一个频道下一个频道,但是 TV 上有,是不是该有对应的逻辑处理这个东西,就好比手机上你可能会处理一些手势,明白了吗?小老弟
|
9
dying4death 2020-07-27 18:29:13 +08:00 1
我怎么觉得楼主说的是 ROM
|
10
VDimos 2020-07-27 18:29:50 +08:00 via Android 1
@SupperMary 这不分仓库构建的吗
|
11
SupperMary OP @dying4death 华生,你抓住了盲点。👍
|
12
SupperMary OP @kop1989 可能问题里的描述有写误导性。我的意思是编译出来的 ROM 是 TV 还是手机哈
|
13
SupperMary OP @ye4tar 老哥我的意思是编译出来的安卓系统是 TV 还是手机哈
|
14
sunrain 2020-07-29 10:09:08 +08:00
```
<uses-feature android:name="android.hardware.type.television" android:required="true" /> ``` |
15
systemcall 2020-07-31 14:26:15 +08:00 via Android
见到不少国产安卓电视和盒子说自己是平板
|
16
zhiyzellda 2020-07-31 19:10:47 +08:00 via Android
@systemcall 因为对 AndroidTV 的源码进行魔改的难度很高吧。平板源码的魔改难度会低很多,包括删掉 Google 生态之类的。AndroidTV 源码想要无痛去掉 Google 生态的工作量可能非常大。
|
17
SupperMary OP @zhiyzellda AOSP 里面的编译选项本身就没有安卓 TV 的编译选项。再加上链接
https://developer.android.com/guide/topics/resources/providing-resources#UiModeQualifier 里面提及的 “television:设备正在通过电视显示内容,通过将界面投影到离用户较远的大屏幕上,为用户提供“十英尺”体验。主要面向遥控交互或其他非触控式交互”。 其实我自己是偏向于安卓会根据运行的硬件来决定自己到底是不是一个 TV 的。只是有关的资料没有找到。 |
18
SupperMary OP @sunrain 正解,位置在 /system/etc/permission 或者 /syste/etc/sysconfig/ 下面的 xml 里面
|
19
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> |