V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zinwalin
V2EX  ›  Android

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

  •  
  •   zinwalin · 48 天前 · 1388 次点击
    这是一个创建于 48 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    10 条回复    2022-06-19 21:25:50 +08:00
    gam2046
        1
    gam2046  
       48 天前
    平板强制横屏是怎么个强制法?

    如果显示区域居中,两边留黑边竖屏显示应用内容,可以尝试(我在 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
        2
    654656413245  
       48 天前 via iPhone
    app manifest 看看 orientation 的 aspectRatio 属性
    zinwalin
        3
    zinwalin  
    OP
       48 天前
    @654656413245 我们是安卓系统和平板提供商,要适配别人家的 App
    zinwalin
        4
    zinwalin  
    OP
       48 天前
    @gam2046 谢谢。
    zinwalin
        5
    zinwalin  
    OP
       48 天前
    @654656413245 谢谢
    zinwalin
        6
    zinwalin  
    OP
       48 天前
    @gam2046 有个 App 运行在我们的平板上,一启动就显示为横屏画面。 但是把 density 从 160 改为 240 后, 变为了竖屏显示,也就是平板被当成手机运行。 所以我想知道改变 density 为什么会导致 App 判断出错。
    gam2046
        7
    gam2046  
       48 天前
    @zinwalin #6
    > density 为什么会导致 App 判断出

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

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

    从你的表述看,你说的横屏应该和我想的不是同一个。你只是需要给重力感应的默认方向就行了(原则上这都不需要你修改,只要相关的传感器驱动是正常工作的,aosp 里已经有了相关判断),比我这个容易,也不涉及显示驱动那一块的修改。
    zinwalin
        8
    zinwalin  
    OP
       47 天前
    @gam2046 嗯 。 我换个说法,density 的变化是不是会导致一些 aspectRatio 的变化?
    SGRRYRS
        9
    SGRRYRS  
       19 天前
    你猜为什么 TV dpi 是约 213?"适用于密度介于 mdpi 和 hdpi 之间的屏幕(约 213dpi )的资源。这不属于“主要”密度组。它主要用于电视,而大多数应用都不需要它。对于大多数应用而言,提供 mdpi 和 hdpi 资源便已足够,系统将视情况对其进行缩放。如果您发现有必要提供 tvdpi 资源,应按一个系数来确定其大小,即 1.33*mdpi 。例如,如果某张图片在 mdpi 屏幕上的大小为 100px x 100px ,那么它在 tvdpi 屏幕上的大小应该为 133px x 133px 。"
    zinwalin
        10
    zinwalin  
    OP
       15 天前
    @gam2046 试了改变重力感应方向,某些 App 并没有横竖屏切换。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2859 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 12:03 · PVG 20:03 · LAX 05:03 · JFK 08:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.