bluesky139 / LTweaks

This is my little tweaks for some Android apps and system, Xposed is needed for most functions.
75 stars 15 forks source link

关于Z2F上百度地图指南针无效的想法 #74

Open daiaji opened 5 years ago

daiaji commented 5 years ago

https://source.android.google.cn/devices/sensors/sensor-types 说是有陀螺仪和磁力计(还是方向传感器的样子) 都能搞出方向的样子 https://www.coolapk.com/apk/com.liang.lollipop.lcompass 这个app里说新api就是用磁力计和加速度感应器搞出方向

那么生产手机时不搞方向感应器也很正常?

有法子把新api的数据转换成旧api的数据吗 某些老软件(比如百度地图和某些打卡软件)还在用旧API 希望L工具箱能搞一下兼容对策

PS:那个APP的评论区说的很玄乎 “这个app在磁铁旁边会失效” 我当时就在想楼主怕不是个铁弱智 这不是理所当然的吗?不依靠磁场判断方向那用什么判断…… “你用旧版API就没事了”

😒…………

旧API这么屌的? 不依靠地磁获取实时方向? 很久之前貌似听说过这样的科技……但是那个好像很贵啊……

😘

捐赠了

bluesky139 commented 5 years ago

你的意思是你的手机没有磁力计,所以在百度地图上没法看到方向?然后你用你发的那个链接里面的指南针能看到方向?

daiaji commented 5 years ago

你的意思是你的手机没有磁力计,所以在百度地图上没法看到方向?然后你用你发的那个链接里面的指南针能看到方向?

磁力计有 但是没有陀螺仪的样子(我也不知道百度地图到底是用的哪个API 可能还是要解包) 百度地图指南针功能没法用 高德地图可以 那个指南针APP里旧API没法用指南功能新API可以(找了个红米试了一下 新旧API都能正常用 而且旧API不受磁铁影响 很神奇)

进一步测试了一下 百度地图里的指南针不受磁力影响 高德地图的指南针受磁力影响 应该是是石锤了

  1. 百度地图写死了只用旧API获取方向
  2. 高德地图可以用新API获取方向
  3. moto z² force确实缺少某种可以被磁力感应器替代的方向感应器

所以旧API是怎么工作的的呢? 新API的数值能转换一下丢给旧API用以兼容百度地图吗?

bluesky139 commented 5 years ago

我看了下那个指南针 app,里面新版 API 是用的 TYPE_ACCELEROMETERTYPE_MAGNETIC_FIELD,老版 API 是用的 TYPE_ORIENTATION

然而,百度地图并没有用老版 API,我抓取到的列表:

SensorManager registerListener {Sensor name="Gravity", vendor="QTI", version=1, type=9, maxRange=19.613297, resolution=5.950928E-4, power=3.5999908, minDelay=5000}

SensorManager registerListener {Sensor name="AK8963 Magnetometer", vendor="AKM", version=1, type=2, maxRange=4911.9995, resolution=0.14953613, power=5.0, minDelay=20000}

SensorManager registerListener {Sensor name="BMP280 Barometer", vendor="BOSCH", version=1, type=6, maxRange=1100.0, resolution=0.009994507, power=0.004, minDelay=33333}

SensorManager registerListener {Sensor name="Rotation Vector", vendor="QTI", version=1, type=11, maxRange=1.0, resolution=5.9604645E-8, power=8.599991, minDelay=5000}

daiaji commented 5 years ago

@bluesky139 就很怪

daiaji commented 5 years ago

我看了下那个指南针 app,里面新版 API 是用的 TYPE_ACCELEROMETERTYPE_MAGNETIC_FIELD,老版 API 是用的 TYPE_ORIENTATION

然而,百度地图并没有用老版 API,我抓取到的列表:

SensorManager registerListener {Sensor name="Gravity", vendor="QTI", version=1, type=9, maxRange=19.613297, resolution=5.950928E-4, power=3.5999908, minDelay=5000}

SensorManager registerListener {Sensor name="AK8963 Magnetometer", vendor="AKM", version=1, type=2, maxRange=4911.9995, resolution=0.14953613, power=5.0, minDelay=20000}

SensorManager registerListener {Sensor name="BMP280 Barometer", vendor="BOSCH", version=1, type=6, maxRange=1100.0, resolution=0.009994507, power=0.004, minDelay=33333}

SensorManager registerListener {Sensor name="Rotation Vector", vendor="QTI", version=1, type=11, maxRange=1.0, resolution=5.9604645E-8, power=8.599991, minDelay=5000}

我又去确认了一下

Underlying physical sensors: Accelerometer, Magnetometer and (if present) Gyroscope

这三个底层传感器我都有…… 但是就是没有Orientation 红米5PLUS用DevCheck看了一下 这手机有个专门的传感器叫做方向传感器(QTI Orientation) 我自己用的moto z² force就没有这个 是系统没有做这个API吗?

再之后 百度地图进入导航模式之后指南针又工作了…… 主界面的地图上 指南针死活不工作……

有办法历遍手机的的传感器吗?

bluesky139 commented 5 years ago

一般就那三个传感器,即使是老 API,也是基于那三个传感器得到结果。

传感器都有的情况下不工作那只能说系统也许有过什么改动,导致应用不兼容。

你那个百度地图应该是兼容 bug 了,可以向百度地图的团队反馈,导航模式工作表示数据是有的,这并不能通过“把新 API 数据转换后传到老 API 来”解决。

daiaji commented 5 years ago

@bluesky139 我用了几个app都是说方向传感器检测不到 应该是原生8.0系统TYPE_ORIENTATION没被构建 miui构建了这个api 实际上普通安卓app并不是直接读取底层传感器的原始数据吧 而是用打包好的API吧 毕竟不是按写xposed模块的套路来嘛 真没有这个函数不是也只会返回null 我看哪有三十分钟就能学会的简单安卓app教程

daiaji commented 5 years ago

@bluesky139 姑且是回报了百度 昨晚上看一会教程 入门教程 都是怎么写hello world 然后没了 之后怎么就是优化应用功耗 怎么用户体验 这种东西 作者的心不会痛吗? 姑且先弄个能用的demo才是重点吧 为什么现在就开始优化和体验? 我只是想知道怎么把TYPE_ORIENTATION怼到变量里 然后看看TextView里输出的字符串

唯一收获就是TYPE_ORIENTATION sdk15开始弃用(不推荐?) aosp 8.0怕是从源码里移除了TYPE_ORIENTATION吧(部分大法8.0表示也有这问题 起码z2f不是孤例)