android 动态权限 部分机型适配记录

概述

          前段时间将项目gradle升级到了3.0,并在上篇文章里记录了遇到的问题,本篇文章将继续补充下gradle升级所导致的联动修改,主要是动态权限的适配处理。

gradle升级背景

          提高编译效率,以及项目框架更新需要,升级会提高不少开发效率: 

          Android Gradle 3.0.0插件是一个大版本的升级,对多个module带来了显著的性能提升。

           由于构建per-call dexing提高了构建速度,每个类编译成独立的DEX文件,并且仅仅被修改的类重新编译。

           当改变依赖项时,Gradle通过不访问依赖项的API的module不重新编译的方式来提高构建速度。

          但是升级导致的联动修改也是加入动态权限的第一个原因

 动态权限背景

          1. gradle升级所导致的联动修改(targetSdkVersion >= 23)

          2. 多数手机商场(已知小米,魅族,华为)已为自己系统定制“自家动态权限机制”,处理策略各不相同,交互体验上也不太友好,因此加入原生动态权限,统一提示策略,提高用户体验

框架选用

        目前主流的框架有PermissionsDispatcher、RxPermissions和easypermissions,仔细比较了下,使用注解原理的比较多,详细比较可以参考这篇文章,都大同小异,最后自己封装了一个,想参考的朋友可以加群交流(文章底部有交流群信息)。

具体适配记录

        目前网上关于动态权限的介绍及处理已经有很多,并且有很大一部分都写得很详细,所以关于动态权限的分组及系统限制等基础问题不再做赘述,只对适配过程中遇到的问题进行记录,希望对大家有所帮助

适配记录1--定位权限:

手机品牌:华为

系统版本:EMUI 4.0.0(基于android6.0)

问题描述:项目的线上版本(未加入动态权限)在手机能正常定位,并且定位服务功能不开启(关闭状态)也能正确定位,注意:这里说的定位功能不是指用户动态授权权限,具体参看截图


指的是设置里面的一项功能,已知的有华为和魅族手机有这个是设置项并且默认是关闭的,小米手机没有定位服务设置项(类似设置应该是:在云服务里>查找手机,默认是开启的),含动态权限的版本,即便用户同意授权定位权限,但是定位服务这里不开启的话,仍然是定位失败的,获取的经纬度均是“4.9E-324”,并且不会有任何报错信息,试尽了各种办法,均不生效,最终在设置项里找到了这个功能,开启!成功!!

问题总结:动态权限版本targetSdkVersion >= 23不但需要授权定位权限,而且需要手动打开定位服务功能,才能正常定位;非动态权限版本targetSdkVersion < 23)不需要开启定位服务功能也能正常定位,坑爹啊!!!!!!

适配记录2--动态权限api不生效:   

手机品牌:魅族

系统版本:Flyme 5.2.4.1A(基于android6.0)

问题描述:国内多数手机厂商在6.0以前就已经加入动态权限处理,并且各个厂商的处理逻辑均不相同,后来原生系统推出动态权限之后,又陆续的转回原生的处理逻辑,但是魅族手机就很任性了!!!直接忽视原生系统的处理逻辑,具体现象是:动态权限版本(targetSdkVersion >=23)的版本在相应的权限申请的时候,原生的申请弹窗以及授权结果回调都不生效!!!只弹一个魅族自家的询问弹窗,用户授权了走正常逻辑,拒绝之后不会触发回调,并且再次申请直接被忽视,没有任何提示,目前还没有没有找到相关的资料怎么解决。简直是没人性!!!

问题总结:目前没有找到解决办法。。。

适配记录3--权限拒绝会重启应用: 

手机品牌:小米

系统版本:MIUI 9.2 稳定版(基于android7.1.1)

问题描述:动态权限版本(targetSdkVersion >=23)安装完成后首次请求拨打电话权限,如果用户拒绝应用会重启,并且没有任何崩溃日志,以后再次申请点击拒绝后会走正常的回调逻辑,把网上的动态权限文章翻了个遍也没有找到解决办法,try catch也无用。。后来看了下竞品,得到启发,把拨打电话的业务逻辑改了,将直接拨打电话改为跳转到拨号页(不直接拨打电话),由用户手动拨打,这样就不再需要申请权限。。。。

问题总结:无法清除的障碍,只能绕开它。。

目前遇到的问题就是这些,后续如果有新的发现会再补充,感觉android系统各厂家的定制化真的是千奇百怪啊,简直不要太坑!希望局座早日统一android。。。

有技术困惑的小伙伴可以加群交流

群号:168786059

加群备注:技术交流





    


  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
Android机型是指将应用程序到不同的Android设备上,以确保应用在各种手机和平板电脑上正常运行。过程包括处理不同的屏幕尺寸、分辨率、像素密度、操作系统版本和设备功能的差异。 为了实现Android机型,可以采取以下几个步骤: 1. 使用布局文件:使用XML布局文件来定义应用程序的用户界面,这样可以根据屏幕尺寸和方向自动调整布局。 2. 使用尺寸单位:在布局文件中使用dp或sp等相对单位,而不是像素单位。这样可以确保界面元素在不同密度的屏幕上以相似的比例进行缩放。 3. 处理屏幕尺寸和方向变化:通过重写Activity的onConfigurationChanged()方法,可以在屏幕旋转或尺寸变化时重新布局并应新的屏幕条件。 4. 资源文件:为不同的设备提供不同的资源文件,如图片、图标和字符串等。可以使用不同的文件夹命名规则(如drawable-hdpi、drawable-mdpi等)来存放不同密度的资源文件。 5. 使用功能检测:如果应用使用了某些特定功能(如摄像头、GPS等),可以使用Android提供的API进行功能检测,并在设备不支持时提供当的替代方案。 总之,Android机型是一个综合考虑屏幕尺寸、分辨率、像素密度、操作系统版本和设备功能等因素的过程,通过合理的布局和资源文件管理,确保应用在各种设备上都能良好运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值