改变安卓 10 源码里的 density,为什么有些 App 会识别为手机?

2022-05-18 10:04:53 +08:00
 zinwalin

运行某些 App 在手机或安卓平板时,手机上只能竖屏显示,平板是强制横屏。

在我们的平板上,发现当把 density 从 160 改为 240 时,这些 App 只能竖屏显示,也就是被当成手机了。

请教下,density 对应到手机或平板是一个什么机制,有没有办法让 App 强制识别设备为平板?

4558 次点击
所在节点    Android
10 条回复
gam2046
2022-05-18 10:10:32 +08:00
平板强制横屏是怎么个强制法?

如果显示区域居中,两边留黑边竖屏显示应用内容,可以尝试(我在 Android9 测试通过)修改:

https://cs.android.com/android/platform/superproject/+/android-9.0.0_r42:frameworks/base/core/res/res/values/config.xml;l=2546;drc=970bf5a6b3db9724b8c9b6d235b65495f7dcb411 值为 true 。

如果你的代码中默认方向并不是横屏方向,可以参考这里的代码修改
https://cs.android.com/android/platform/superproject/+/android-9.0.0_r42:frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java;l=7243;drc=11768fd80fe62e66df0651b3301315afeb234abb
654656413245
2022-05-18 13:43:31 +08:00
app manifest 看看 orientation 的 aspectRatio 属性
zinwalin
2022-05-18 17:45:20 +08:00
@654656413245 我们是安卓系统和平板提供商,要适配别人家的 App
zinwalin
2022-05-18 17:45:29 +08:00
@gam2046 谢谢。
zinwalin
2022-05-18 17:45:34 +08:00
@654656413245 谢谢
zinwalin
2022-05-18 17:48:01 +08:00
@gam2046 有个 App 运行在我们的平板上,一启动就显示为横屏画面。 但是把 density 从 160 改为 240 后, 变为了竖屏显示,也就是平板被当成手机运行。 所以我想知道改变 density 为什么会导致 App 判断出错。
gam2046
2022-05-18 18:00:12 +08:00
@zinwalin #6
> density 为什么会导致 App 判断出

不可控的行为,这是应用开发商自己的判断逻辑。早年间我看到过一些第三方写的文章,通过判断屏幕密度来猜测设备是否属于手机,因为一般手机的屏幕素质都会高出其他 Android 设备(平板、电视)一大截。

我这是做的 Android TV 机顶盒开发,也是为了一些仅支持的竖屏的应用能够在 ATV 上跑起来。虽然不知道这样做有什么意义,毕竟这类应用根本不支持遥控器操作,但是客户是这么要求的。

从你的表述看,你说的横屏应该和我想的不是同一个。你只是需要给重力感应的默认方向就行了(原则上这都不需要你修改,只要相关的传感器驱动是正常工作的,aosp 里已经有了相关判断),比我这个容易,也不涉及显示驱动那一块的修改。
zinwalin
2022-05-18 20:17:36 +08:00
@gam2046 嗯 。 我换个说法,density 的变化是不是会导致一些 aspectRatio 的变化?
SGRRYRS
2022-06-16 14:45:17 +08:00
你猜为什么 TV dpi 是约 213?"适用于密度介于 mdpi 和 hdpi 之间的屏幕(约 213dpi )的资源。这不属于“主要”密度组。它主要用于电视,而大多数应用都不需要它。对于大多数应用而言,提供 mdpi 和 hdpi 资源便已足够,系统将视情况对其进行缩放。如果您发现有必要提供 tvdpi 资源,应按一个系数来确定其大小,即 1.33*mdpi 。例如,如果某张图片在 mdpi 屏幕上的大小为 100px x 100px ,那么它在 tvdpi 屏幕上的大小应该为 133px x 133px 。"
zinwalin
2022-06-19 21:25:50 +08:00
@gam2046 试了改变重力感应方向,某些 App 并没有横竖屏切换。

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

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

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

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

© 2021 V2EX