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

被安卓恶心到了(准确来说是安卓 App 开发者)

  •  
  •   sodulty · 331 天前 · 15535 次点击
    这是一个创建于 331 天前的主题,其中的信息可能已经有所发展或是发生改变。
    被安卓恶心到了

    准确来说是无奈的呐喊。先说两点我遇到的情况吧

    1 、 在用小米 14 ,12306 申请临时身份证的时候,死活获取不到定位(此功能强制需要 否则无法申请),关机重启尝试 n 次均不行,已改签。。。。然后我发现只打开定位不够,必须同时打开 Wi-Fi 才能获取到定位

    2 、有在自己开发低功耗蓝牙设备,用了不少安卓 BLE 调试 app , 发现部分 18-20 年的安卓手机无法在仅开启蓝牙的情况下扫描 BLE ,必须打开定位和蓝牙才能扫描到蓝牙 BLE

    懂技术的前提下能摸索清楚,1 这个情况要是家人等等大众碰到的时候干着急怎么办? 12306 也不给提示,你就算给个“请打开 Wi-Fi 和蓝牙来辅助精确定位”的提示也行啊,纯傻逼,扛得起国民级出行 App 这个担子就要扛得住骂


    但果子从来没出现类似的情况,为什么?

    1 、 果子不给你完全关闭 Wi-Fi 蓝牙定位的快捷方式,(一般都置灰)缺点是耗电,优点是不影响各种服务,不想给精确定位也能模糊定位,安卓端的模糊定位反而会引起部分 app 定位失效或崩溃

    2 、安卓很灵活能控制中心完全关闭定位蓝牙 Wi-Fi ,但是 app 开发者无法针对众多安卓版本的权限做全适配处理(安卓低版本和高版本的定位、连接附近设备的权限需要分开单独做处理),也没有及时通知用户,就会导致我以上遇到的情况
    81 条回复    2023-12-31 17:48:41 +08:00
    JimmyYan2019
        1
    JimmyYan2019  
       331 天前
    所以安卓想好好的用,就得频繁换流行机器,不然开发者不给你单独适配,用起来很糟心,还有它要什么权限就给它,鬼知道没给它会引起什么问题。
    edwardhodges
        2
    edwardhodges  
       331 天前   ❤️ 1
    安卓奇葩问题太多,没有那么多手机根本适配不过来。使用 BLE 必须打开定位这个系统要求的,但是不是每个机型和系统都是这样,很奇葩,没办法。
    q503315508
        3
    q503315508  
       331 天前   ❤️ 2
    2 应该不是开发者背锅了,android 是这么设计的,即使是现在开了 BLUETOOTH_SCAN 权限,不申请定位权限也扫不到全部设备(应该是标准协议下的信标设备),比如 ibeacon
    sodulty
        4
    sodulty  
    OP
       331 天前 via Android
    @edwardhodges 并不是,我自己写的 BLE 调试工具就不用定位权限
    sodulty
        5
    sodulty  
    OP
       331 天前 via Android
    @q503315508 对 翻了下是这样的,但绝大多数 app 不给提示,导致使用者怀疑人生
    yolee599
        6
    yolee599  
       331 天前 via Android
    @q503315508 #5 就是开发者的锅,开发者应该给用户提示开启定位,否则让用户去猜?
    laommmm
        7
    laommmm  
       331 天前
    小米的 BUG ,让我刚回来用小米的时候怀疑人生,仿佛第一次认识小米一样。
    ochatokori
        8
    ochatokori  
       331 天前 via Android
    开发者和安卓 37 分锅
    corcre
        9
    corcre  
       331 天前
    咸鱼上买了个米家的扫地机器人一代, 抽风的时候就需要重连设置一下, 然后发现怎么样都连不上, 试了半天发现需要打开 gps 的精确定位, 模糊定位不行...你 tm 一个扫地机器人, 自己发的 wifi 我都连上了告诉我找不到这台扫地机器人????还需要一个精确定位?难道扫地机器人里面还有 gps 模块的吗
    Sosocould
        10
    Sosocould  
       331 天前
    啊这……po 主你纯粹是给 12306 恶心到而已,和 Android 以及 Android 开发者关系都不大,不就是一个 12306 没给够用户指引的问题吗。12306 地位超然物外,覆盖群体又格外庞大,中外也没几家这样的企业。以前 12306 买票还要安装自签的根证书呢,怪不到 Win 头上来。
    nothingistrue
        11
    nothingistrue  
       331 天前
    1 的锅明显要 12306 背,跟操作系统就没关系。2 没锅,软件本来这样四处漏风的,果子那种才不是大众。
    debuggerx
        12
    debuggerx  
       331 天前   ❤️ 3
    恶心的是,定位关闭导致扫不到 ble 设备只在部分手机上出现,而且程序捕获不到异常,可以认为是对开发不可知。我也是做 ble 项目的时候,自己开发测试没问题,但是客户就是说扫不到,三星、红米、华为都有部分机型用户报告,网上搜这个问题,也没有一个准确判断哪些机型会出问题的办法。
    所以为了不影响没问题的用户,我最后只能是在检查完一切权限没问题之后,调用 scan 方法的同时起一个计时器,超过 3 秒没有扫到任何设备就弹窗引导用户去打开 GPS 开关……毕竟如果强制要所有用户都必须打开定位开关才能用,某些人又要质疑凭什么了。
    tool2d
        13
    tool2d  
       331 天前
    不一定是 12306 的锅,也有可能一开始没用 wifi 定位,只用了 gps 高精度定位。

    问题在于,在火车站室内你也找不到 3 个以上的卫星信号,于是就一直卡住。

    你如果同时打开了 wifi ,那定位方法就不走 GPS 了,肯定是秒定位了。
    qyning
        14
    qyning  
       331 天前   ❤️ 1
    @corcre 不给精准定位手机获取不了已连接 WIFI ,这个扫地机配置应该是要连接扫地机热点,APP 需要知道你是否已经连接对应热点,之后发送 WIFI 和密码给扫地机联网。
    Kamiyu0087
        15
    Kamiyu0087  
       331 天前
    @debuggerx 这个跟 Android 版本有关吧
    印象中 9 开始就需要打开 GPS 了,之前的不需要
    sodulty
        16
    sodulty  
    OP
       331 天前 via Android
    @Sosocould 骂归骂,如果所有人都不发声,开发者不指引,到头来不还是用户莫名其妙的被恶心? 这个帖子我希望越多的人看到越好,相关开发者应该自我反省
    vcn8yjOogEL
        17
    vcn8yjOogEL  
       331 天前 via Android
    标准的 WiFi 和蓝牙扫描 API 不需要打开对应功能, 会自动调用
    Sosocould
        18
    Sosocould  
       331 天前   ❤️ 1
    @sodulty 在 12306 ,开发者没有什么话语权
    edwardhodges
        19
    edwardhodges  
       331 天前
    @sodulty 是部分机型和系统,你不给定位权限,可以正常扫描,但是不会扫描出任何设备。
    hokori
        20
    hokori  
       331 天前
    开发者的锅 测试没发现这个问题 发现问题的话,申请下定位和 wifi
    debuggerx
        21
    debuggerx  
       331 天前
    @Kamiyu0087 你在网上搜,有人碰到 6.0 系统就有这个问题了……再看这个“总结”,实际上也只是部分样本,没法准确判断: https://www.dandelioncloud.cn/article/details/1610809860885266433
    sodulty
        22
    sodulty  
    OP
       331 天前 via Android
    @tool2d 观点合理。但就是 12306 开发者的锅没得说,用户不需要知道获取定位背后的技术实现,只要知道用这个功能需要打开 Wi-Fi 开关
    godmiracle
        23
    godmiracle  
       331 天前
    还好俺安卓只用来打游戏和装个工作微信。
    forgottencoast
        24
    forgottencoast  
       331 天前
    @corcre
    iOS 也是这样,要共享 Wifi 密码给 app 就必须开精确定位,我也是被坑了很久才发现。
    sodulty
        25
    sodulty  
    OP
       331 天前 via Android
    @edwardhodges 验证了下 是的。感谢
    q503315508
        26
    q503315508  
       331 天前
    @yolee599 哦哦 没引导和提示 那确实是做的有问题 。应该做好引导 并 提示权限用途
    icyalala
        27
    icyalala  
       331 天前   ❤️ 1
    扫描蓝牙和 beacons 之类的设备,本身就相当于暴露用户的位置了吧,所以需要申请位置权限告知用户被定位?
    heIIokitty
        28
    heIIokitty  
       331 天前
    这一看就是 12306 测试那边的锅,这个问题,不应该在测试用例里面包含吗?难道,他们的测试用例,都是全部权限开启的情况下进行测试?正常点的测试,应该都不会这样干吧,至少会把权限都关闭了,再进行测试。
    fredweili
        29
    fredweili  
       331 天前
    所以普通用户就是权限全开,予取予求
    greenskinmonster
        30
    greenskinmonster  
       331 天前
    @sodulty #22 同意 tool2d 的说法, 感觉不应该是 app 的责任,app 问系统要位置信息,系统无论根据网络还是 GPS 还是基站定位,都不是 app 能控制的,app 只要提示你无法获取的有效位置信息即可,至于你要去室外开阔区域,还是开无线、蓝牙、手机网络,那是你应该处理的事情。
    CFM880
        31
    CFM880  
       331 天前
    一般这种,我们会建议卸载重装 App ,肯定第一次会申请权限,如果用户之前明确拒绝后,不再申请或提示
    Recle
        32
    Recle  
       331 天前
    安卓这十年,太恶心人了,刷机刷到最后,换了 iPhone ,自此省心多了
    huhalo
        33
    huhalo  
       331 天前 via Android
    安卓应用获取定位分两种,一种是大略位置,一种是精确位置,如果应用申请精确位置,就需要打开 WiFi 和蓝牙
    HomeZane
        34
    HomeZane  
       331 天前
    @tool2d 感觉是这个问题,刚刚把 wifi 关了,测试了下,没啥问题,可以直接申请。
    ssnoopy
        35
    ssnoopy  
       331 天前
    确实是他的锅,等应用升 target33 就好了
    kaedea
        36
    kaedea  
       331 天前 via Android
    没什么问题,Android Fused 定位最佳实践本来就是个复杂的话,我相信没开 WiFi 定位异常的时候,WiFiInfo 肯定一堆异常被 catch 了,然而这事也怨不得 App 开发者,锅出在 mapsdk 现在许多 sdk 都以开箱即用作为卖点宣传,结果就是傻快而已。
    kaedea
        37
    kaedea  
       331 天前 via Android
    @huhalo 没错,不过后者应该引导打开 WiFi/蓝牙的。不清楚 iOS 这方面怎么处理,iOS 混合定位难道不需要用户授权?
    Lin0936
        38
    Lin0936  
       331 天前
    Android 的大多数开发者都把用户当开发者,不考虑正常用户场景的。
    ssnoopy
        39
    ssnoopy  
       331 天前
    @kaedea 首先我不是 mapsdk 开发者,我认为这种错误肯定要抛出来或者自己给与通用 Ui 提示,否则,太糊弄事了
    littiefish
        40
    littiefish  
       331 天前 via iPhone
    用过不少摄像头,遇到一样的问题,基本所有的 APP 绑定摄像头时必须开定位,要不邦定一定失败,有些会提示,有些 TM 没任何提示。
    mxT52CRuqR6o5
        41
    mxT52CRuqR6o5  
       331 天前
    chatgpt 说从安卓 6.0 开始扫描 BLE 需要申请位置权限,我不是专业的不清楚到底是某些系统不用申请位置权限违反了标准还是另一些系统需要申请权限违反了标准
    wangzaiSummer
        42
    wangzaiSummer  
       331 天前
    “准确来说是安卓 App 开发者”,你这句话真的准确吗?说事就说事
    monzuguan
        43
    monzuguan  
       331 天前 via Android
    跑个题,临时身份证明或乘车证明能线下办理吗?不依靠手机,工作人员要是引导线上办理的话就掏出黑白屏诺基亚😂
    Senventise
        44
    Senventise  
       331 天前
    https://developer.android.com/develop/connectivity/bluetooth/bt-permissions?hl=zh-cn#declare-android11-or-lower
    "ACCESS_FINE_LOCATION 是必需的,因为在 Android 11 及更低版本中,蓝牙扫描可能会用于收集有关用户位置信息的信息。"
    部分手机需要定位权限,可能是因为安卓版本?
    jeesk
        45
    jeesk  
       331 天前
    这算啥 ? target sdk 越高越坑。
    career
        46
    career  
       331 天前 via iPhone
    老爷又不用自己买票
    sodulty
        47
    sodulty  
    OP
       331 天前 via Android
    @monzuguan 我遇到的情况无法线下办理,小站,机器不支持直接扫描进站,这种屎到淋头的情况还是 app 办理最方便。。。
    sodulty
        48
    sodulty  
    OP
       331 天前 via Android
    @career 高铁直接开老爷家里是吧
    yhm2046
        49
    yhm2046  
       331 天前
    这个标题容易找骂
    1.国内的安卓系统都是 aosp 魔改的,跟原生 android 基本两个东西
    2.对事不对人,多做事少喷人
    sir283
        50
    sir283  
       331 天前
    毕竟是国内特色安卓系统加上特色的开发环境,所以,出现任何的问题,都不用觉得奇怪,习惯就好了。
    而 play 上的国产应用,就好很多了,但是容易封号,斟酌! O(∩_∩)O
    WebKit
        51
    WebKit  
       331 天前 via Android
    1 也不是开发者的问题,安卓旧版本就是这么要求的,必须打开 wifi 才能定位
    WebKit
        52
    WebKit  
       331 天前 via Android
    @corcre 你这属于不懂技术了,获取 wifi 就是要定位权限😑
    sodulty
        53
    sodulty  
    OP
       331 天前 via Android
    @yhm2046 事在人为,安卓果子各有优劣,权限引导是开发者没弄好我还不能喷了?我就是专门起的这个标题才能吸引开发者进来,我为什么不骂产品经理?产品经理有几个能说清安卓版本和权限的事?
    amirobotics
        54
    amirobotics  
       331 天前
    小米虽然每次都说自己的配置很顶,但通常在看不见的地方做阉割。有次在外面死活定位失败,也是让我打开 wifi 连接。。
    kaedea
        55
    kaedea  
       331 天前 via Android
    @ssnoopy 易用性-灵活性-健壮性,不可能三角。
    abc8678
        56
    abc8678  
       331 天前 via Android
    想要使用时询问权限,结果不行,APP 非要我改为始终允许
    corcre
        57
    corcre  
       331 天前
    @WebKit 是真不知道这回事
    但是好像也不用啊, 热点都连上了, 发个 api 请求试一下连没连上不就好了...
    EIJAM
        58
    EIJAM  
       331 天前
    xx 特色 App 的问题。都 targetAPI 升级到 33 了,选文件图片时还要求权限,不能支持系统的文件选择器。
    WebKit
        59
    WebKit  
       331 天前
    @corcre #57 因为要给扫地机器人配网,然后有个需求就是,把你连接的 Wi-Fi 的 SSD ,默认写道配网的输入框里。有点类似现在的手机号登录,不需要输入手机号,直接获取你手机号的操作
    hicdn
        60
    hicdn  
       331 天前 via Android
    这种破事太多,我改双持了。国产 app 只在 iPhone se2 上运行。

    更有甚者,有些微信小程序在 Google play 版微信上打开白屏或者点击一下就重新加载。
    winterbells
        61
    winterbells  
       331 天前 via Android
    定位那个是真恶心
    还有一个,蓝牙耳机+微信打电话,只能用外放,试了无数种方法都解决不了,上网搜了很久看到一条要把附近的设备权限打开。
    太 tm 坑人了
    zpxshl
        62
    zpxshl  
       331 天前 via Android
    12306 问题,要不换个非小米的手机试试?
    coderstory
        63
    coderstory  
       331 天前
    12306 的我也遇到了。。还好我拿了 2 个手机,不然绝壁火车站过夜
    72MpQOSsJhyLs88N
        64
    72MpQOSsJhyLs88N  
       331 天前
    V 站不是捧安卓骂苹果吗。OP 这是站位不够高啊
    okhao8801
        65
    okhao8801  
       331 天前
    额,蓝牙设备扫描需要定位权限是 google 强制规定的啊,关开发者啥事情,你应该看下 google 官方文档
    UkDP86IAeTHJr9p3
        66
    UkDP86IAeTHJr9p3  
       331 天前 via Android
    安卓确实不适合在国内使用,小米不适合在任何地方使用
    iloveoovx
        67
    iloveoovx  
       331 天前
    坚决不下 12306app ,去火车站旁边售票厅拿临时身份证
    虽然没啥区别,少一个是一个
    darkengine
        68
    darkengine  
       331 天前
    安卓开发者真是 N 面受敌,男怕入错行,大家不要再选前端了
    yugoal
        69
    yugoal  
       331 天前
    开发者不背锅,高版本蓝牙权限现在就是要定位权限,低版本 target 应用市场又要下架,那怎么办嘛
    loopq
        70
    loopq  
       331 天前
    开发者不应该背锅吧,毕竟 iOS 和 Android 的定位方式是一样的,总共三种,gps 基站 wifi
    相关介绍在这里,
    Android: https://juejin.cn/post/7049900644383064078
    ios: https://sunxichun.github.io/2018/12/30/iOSLocation/

    我进 Android 12306 测试了一下,不开 wifi 保留 数据网络和 GPS 可以定位,不开 GPS 提示定位失败,请打开 GPS ,而 GPS 定位速度最慢以及在室内有失败的情况,如果想快速准确定位,一定是 wifi + GPS 同时打开,不清楚具体复现情况,只能推测是 GPS 定位失败或者 小米 14 rom 的问题,毕竟我是用一加 氧 os 测试的,系统贴近原生。
    totoro52
        71
    totoro52  
       331 天前
    你来开发安卓就知道啥叫适配地狱了。。。还要扛着谷歌每年的各种骚操作,
    amon
        72
    amon  
       331 天前
    印象深刻的一个帖子,大家吐槽 Android 流氓 App 太多,下面用户说谁让你不用什么冰箱 App 冻结。

    有种感觉大家吐槽印度 QJ 犯太多,印度人说:谁让不穿铁内裤。哈哈~
    Tyanboot
        73
    Tyanboot  
       330 天前
    @greenskinmonster 这怎么就不是 app 的责任了,按照这个说法,我用支付宝付款,失败了统一提示“付款失败”就行了,至于你是余额不足、密码错误、网络错误、对方账号锁定还是怎么回事,那也是你应该处理的事情?

    再比如之前美团点外卖,用了一个红包,下单前看价格还是减过的,下单付款的时候就变成原价了,没有任何提示,等付完款发现不对劲,查看订单详情里面根本就没使用任何红包,最后查了一圈才发现是因为该商家此类红包今天无剩余量了。是不是这也不是美团的责任,反正你红包用不了,至于是他过期了、商家不让用、条件不符合,那也是你用户自己需要处理的事情?
    greenskinmonster
        74
    greenskinmonster  
       330 天前
    @Tyanboot 两种场景对比下

    支付宝调用银行接口->银行交易失败,返回错误代码->支付宝显示对应错误信息,以上是正常操作。
    应用向系统申请定位信息->系统定位失败,返回错误信息->应用显示错误原因,也是正常操作。

    支付宝会在你余额不足的时候,帮你查询附近有哪个网点可以存钱吗?
    应用需要在定位失败的情况下,提示你打开无线/蓝牙/手机数据吗?假如用户在室内,应用是不是需要开启前后摄像头,判断下周围环境,提示你到开阔区域以便接受卫星信号?

    我觉得对于需要定位功能的应用,只需要检查定位权限是否授予,系统定位开关是否打开即可。需要网络的话,提示网络是否连通。无线和手机数据对于定位都是可选,否则在野外的话,单根据 GPS 就不能定位了吗?
    kimiler
        75
    kimiler  
       330 天前
    第一个应该是开发者代码有问题。
    第二个是机制问题,android 里蓝牙开关是代表此功能是否能使用。扫描则是另外一个权限组-发现附近的设备。准确的说发现附近的设备,分为三套权限:
    扫描周边蓝牙 12 之前则统一用定位权限。
    链接蓝牙设备 12 ,有专门的权限 api ,因此可以不用申请定位权限。
    扫描周边 wifi 13 之后,有专门的权限 api ,因此可以不用申请定位权限。
    ellermister
        76
    ellermister  
       330 天前
    无论是 Android 还是 ios 现在如何在飞机上飞行模式下,打开 GPS 定位自己的坐标啊?好多地图下了离线模式都没屌用
    lqz
        77
    lqz  
       329 天前
    应该是没打开权限导致的
    pi7m1Dr691wfl95q
        78
    pi7m1Dr691wfl95q  
       329 天前
    长期用 pixel 手机,android 系统没碰过这些问题,朋友的小米手机,安卓系统,每次让我帮他弄个什么 app 的时候就想把他手机砸成粉末。
    yanhuamiluan
        79
    yanhuamiluan  
       329 天前
    钉钉会提示“请打开 Wi-Fi 和蓝牙来辅助精确定位”, 只是开 wifi 但是没连上 wifi, 不懂原理
    12306 嘛
    Admin8012
        80
    Admin8012  
       326 天前 via Android
    双持破千愁 养蛊就得 ios
    behindeye
        81
    behindeye  
       326 天前   ❤️ 1
    本人从事某手机厂商安全组,负责系统权限机制,这个真的是安卓在为以前的坑过买单,早期安卓权限过度开放,导致权限滥用,用户隐私泄露等,后面谷歌为了逐渐回收权限,每次大版本都有变更,然后各种权限兼容、升级逻辑,一堆 if else ,不同系统版本,不同表现,应用不同 targetsdk ,也会不同的授权机制,非常复杂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3326 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 11:44 · PVG 19:44 · LAX 03:44 · JFK 06:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.