Uniapp 下安卓的权限申请

安卓手机各种定制化的系统,真的是一言难尽。尤其是国内的这些手机厂商各种定制化的系统,底层修改加上深度定制。也就导致了为了适应国内的手机厂商系统,要做大量的工作。

这几天在准备闺蜜圈的更新发版,再加入了推送之后。由于系统的角标设置问题,最终是通过原生插件实现的。想着多找几个设备测试下实际的效果。

百度的 mtc 平台之前充了 200 块钱,停止做 app 之后里面有一些余额已知没用完,结果再次想使用的时候结果要求进行企业认证。当时就懵逼了。

现在真机租用的价格是真的离谱,一块钱一分钟,没有任何的优惠。

结果第一台机器就遇到了让输入身份证号验证的情况,5 块钱白花了。

这 tm 我咋知道号码是啥,联系客服结果折腾半天都没找到人工,最后加 qq 群才有人联系自己,加微信,把时间返还了。就离谱。不过在测试的时候还是发现了一个问题,那就是竟然在一些手机上无法访问图片。

为了满足华为市场上架要求,增加了一个弹窗用来显示权限申请的提示。实现逻辑:

UNIAPP 华为应用商店 未同步告知权限申请的使用目的

然而,也正是因为这个代码,貌似导致在 android 11 以上的系统失效了。具体原因可能是安卓权限的细化导致的,已经不在有这个存储权限申请了,取代的是更加细化的权限:

在Android14上与应用交互的用户现在可以授予对其媒体库的部分访问权限(READ_MEDIA_IMAGES和READ_MEDIA_VIDEO)。

新对话框包含以下选项:

●  选择照片和视频: Android14中的新功能。用户选择想要提供给应用的特定照片和视频;

●  全部允许:用户授予对设备上所有照片和视频的完整库访问权限;

●  不允许:用户拒绝所有访问。

如果用户选择了“选择照片和视频”并且应用稍后再次请求READ_MEDIA_IMAGES 或者 READ_MEDIA_VIDEO权限,系统会显示不同的对话框,让用户有机会授予完全访问的权限,维持现状,或者授予对其他照片和视频的访问权限。为了帮助应用支持新的变化,系统引入了一个新的权限READ_MEDIA_VISUAL_USER_SELECTED。

如果应用不声明READ_MEDIA_VISUAL_USER_SELECTED权限,则会发生以下行为:

●  在用户与应用会话期间,将会授予对用户选择的照片和视频的READ_MEDIA_IMAGES 和 READ_MEDIA_VIDEO 临时访问权限。当应用移到后台或者当用户主动杀死应用时,系统最终会拒绝这些权限。此行为就像其他一次性权限一样;

●  如果应用稍后需要访问其他照片和视频,必须手动请求权限重新获得权限。

https://developers.vivo.com/doc/d/6ca290306e294b11ae2d6bf14757fd1d
  • Android 10。分区存储、限制访问不可重置的硬件标识符、限制对剪贴板数据的访问权限
  • Android 11。强制执行分区存储、单次授权、自动重置权限、软件包可见性。
  • Android 12。授予大致位置信息权限、剪贴板访问通知、更安全的组件导出。
  • Android 13。细化的媒体权限、内置图片选择器、隐藏剪贴板中的敏感内容、屏蔽不匹配的 Intent、针对 Wifi 设备的新运行时权限、广告 ID 权限。

 

不得不说因为这些更新导致的一些问题,的确比较棘手。主要是系统版本,厂商定制合并到一块,这个问题就麻烦了。

搜索之后发现uniapp 的 uts 插件:https://ext.dcloud.net.cn/plugin?id=15597

然而,这个插件的问题,貌似在 uniapp 项目中导入之后申请权限没有看到效果,不知道是因为代码问题还是什么其他问题导致的。底层的实现逻辑应该是:https://github.com/getActivity/XXPermissions?tab=readme-ov-file

这个开源项目看起来相对更靠谱一些,后期如果需要喜欢权限申请以及判断,可能还是得将这个项目代码集成到原生插件中实现。

如果项目已经适配了 Android 10 分区存储特性,请在 AndroidManifest.xml 中加入
<manifest>

    <application>

        <!-- 告知 XXPermissions 当前项目已经适配了分区存储特性 -->
        <meta-data
            android:name="ScopedStorage"
            android:value="true" />

    </application>

</manifest>
如果当前项目没有适配这特性,那么这一步骤可以忽略

需要注意的是:这个选项是框架用于判断当前项目是否适配了分区存储,需要注意的是,如果你的项目已经适配了分区存储特性,可以使用 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE 来申请权限,如果你的项目还没有适配分区特性,就算申请了 READ_EXTERNAL_STORAGE、WRITE_EXTERNAL_STORAGE 权限也会导致无法正常读取外部存储上面的文件,如果你的项目没有适配分区存储,请使用 MANAGE_EXTERNAL_STORAGE 来申请权限,这样才能正常读取外部存储上面的文件,你如果想了解更多关于 Android 10 分区存储的特性,可以点击此处查看和学习。

这一系列的权限细分,适配起来就比较蛋疼了。

目前暂时的解决方案,针对华为系列的手机进行权限提醒,其他的暂时先不做处理了:

if (plus.os.name != "iOS") {
                    var androidVersion = plus.os.version;
                    console.log('Android版本信息:', androidVersion);
                    console.log('系统信息:', plus.os.name);
                    // this.showToast(androidVersion);
                    let info = uni.getSystemInfoSync();
                    console.log('手机品牌:' + info.brand); // 输出手机品牌
                    if (info.brand === 'huawei' ||info.brand === 'honor') {

                        let result = await this.$store.dispatch("permitions/requestPermissions",
                            'READ_EXTERNAL_STORAGE')
                        if (result !== 1) return
                    } else {
                        // let result =await this.$store.dispatch("permitions/requestPermissions",
                        // 	'MANAGE_EXTERNAL_STORAGE')
                        // if (result !== 1) return
                        // 针对安卓13以上不处理 声明权限
                    }

                }

一圈下来,钱都花光了要~~

一分钟一块钱,从来没觉得时间这么值钱过~~

 

☆版权☆

* 网站名称:obaby@mars
* 网址:https://lang.ma/
* 个性:https://oba.by/
* 本文标题: 《Uniapp 下安卓的权限申请》
* 本文链接:https://nai.dog/2024/06/17361
* 短链接:https://oba.by/?p=17361
* 转载文章请标明文章来源,原文标题以及原文链接。请遵从 《署名-非商业性使用-相同方式共享 2.5 中国大陆 (CC BY-NC-SA 2.5 CN) 》许可协议。


You may also like

42 comments

  1.   Level 6
    Google Chrome 125 Google Chrome 125 Mac OS X 10.15 Mac OS X 10.15 cn浙江省杭州市 华数

    我的穷人思维让我第一个想到的念头是去手机店里蹭实体机测试。

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      关键是没那么多时间去实体店啊,总不能带着电脑去调试吧~~ rofl

  2. Level 1
    Google Chrome 86 Google Chrome 86 Windows 10 Windows 10 cn上海市 联通

    一块钱一分钟,一天八小时,一小时60分钟,480元一天,一个月就有1万2以上,啧啧,这一台手机比一个普通白领工资都高啊,真赚钱。

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      上次见到这么离谱的还是驾照考场练车,也是一分钟一块钱。哈哈哈

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      是的,真 tm 值钱,之前华为还有免费的测试机,现在貌似找不到了

  3.  Level 4
    Safari 17 Safari 17 Mac OS X 10.15 Mac OS X 10.15 cn贵州省贵阳市 移动

    我就说嘛 维护app还是挺难的 费时费力还费毛爷爷😂

  4. Level 2
    Google Chrome 126 Google Chrome 126 Windows 10 Windows 10 cn四川省 移动/全省通用

    这个太赚钱了嘛!昨晚上刷了一晚上短视频看阿兴做一天1000块的男人,累成狗一天才1000多。 cry

      1. Level 2
        Google Chrome 126 Google Chrome 126 Windows 10 Windows 10 cn四川省 移动/全省通用

        你说一天1000块的男人吗?B站的一个阿婆主,就是干苦力搬砖和沙那些!才20多岁哦,太佩服了!富婆们见了都要流口水,哈哈

  5. Level 3
    Microsoft Edge 126 Microsoft Edge 126 Windows 10 Windows 10 cn福建省宁德市 电信

    Android 真的是醉了,为了各自的系统出彩,你改改这,我改改那。一塌糊涂

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      除此之外还有家长时不时的出来批评教育。

    2. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      你博客又打不开了?
      无法访问此网站检查 xiangming.site 中是否有拼写错误。
      DNS_PROBE_FINISHED_NXDOMAIN

  6.  Level 5
    Google Chrome 107 Google Chrome 107 Android 14 Android 14 cn北京市 联通

    你能告诉我你的项目啥时候收入吗,我看了快大半年进度,花不完的钱啊,给我职业病都看犯了,啥时候盈利!!!

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      没有,未来很长一段时间都不会有的。😂

  7. Level 4
    Microsoft Edge 120 Microsoft Edge 120 Windows 10 Windows 10 cn广东省广州市 联通

    租机应该市场很大,利润很高。我工地这里,有几层楼就是搞租机业务,特别多人

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      利润率应该还是可以的,本来想着找真机租赁的平台租一台,结果看了下一年起租。直接放弃了。

  8. Level 1
    Microsoft Edge 124 Microsoft Edge 124 Windows 10 Windows 10 cn安徽省宣城市 电信

    好辛苦的付出,还是最宝贵的时间成本,不容易啊。

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      所以,千万不要当程序员,哈哈哈。太惨了

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      问题在于,旧手机可能不会出问题。
      你看截图就知道了,基本都是新的系统反而会出问题,andoird 10 以上的各种国产定制系统,所以旧手机解决不了问题啊。
      我这里有好几台旧手机,公司的测试手机,但是,在上面一切正常。

  9.  Level 3
    Google Chrome 126 Google Chrome 126 Mac OS X 10.15 Mac OS X 10.15 cn上海市 电信

    之前看到uniapp出了个uts,说是编译成原生native,ios编译成swift,兴高采烈的准备建立项目,发现暂不支持ios。。。

    1. 公主 Queen 
      Google Chrome 120 Google Chrome 120 Windows 10 Windows 10 cn山东省临沂市 联通

      uts的插件,我试了,调不起来。不知道该咋用

  10.  Level 5
    Microsoft Edge 126 Microsoft Edge 126 GNU/Linux GNU/Linux cn广东省珠海市 电信

    还有这种真机租用费用的,涨知识了,另外费用真贵,你还舍得投入进去,为了项目,敬佩了!

      1.  Level 5
        WebView 4 WebView 4 Android 12 Android 12 cn广东省珠海市 联通

        原来是想~~,有想法有格局,突然发现你的身影很大,哪天你的app被人收购了,我帮你打杂哈

    1. 公主 Queen 
      Google Chrome 118 Google Chrome 118 Mac OS X 10.15 Mac OS X 10.15 cn山东省青岛市 联通

      模拟器用来开发可以,解决特定机型问题没用。连厂商的系统都装不了,所以解决不了问题,嘎嘎

  11.  Level 5
    Microsoft Edge 124 Microsoft Edge 124 Windows 10 Windows 10 cn河南省漯河市 联通

    要说真机多的,要么租赁二手平台,要么手机店,要么自媒体手机博主,找个手机博主谈谈合作。 laugh

  12. Level 5
    Wordpress App 25 Wordpress App 25 iPhone iOS 17.5.1 iPhone iOS 17.5.1 cn安徽省滁州市 电信

    这个还是缺少一个统一的标准,不一样的手机,权限还不一样,也太麻烦了啊,耗时耗钱耗精力。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注