target-api 升级到26遇到的问题 国产ROM动态权限的坑

记录一下targetApi升级到23过程中遇到的一些问题

  1. 动态权限,使用TedPermission相关api即可处理;需要注意的是,在授予权限后立即跳转到其他界面有可能会出现黑屏情况,通过handler延迟跳转到其他界面就不会有问题了。
  2. 使用checkPermission注解时,最好不要把该注解放到系统的生命周期函数上,也不要放到例如onclickListener等方法上,避免影响系统的调用流程。该注解不适合放在有返回值的函数上面,否则当原有顺序执行操作被打断时,返回值不可预期。该注解只适合放在没有返回值的方法上,必要时抽取相关逻辑到一个无返回值的函数上。
  3. targetsdk为26时,如果使用getContentResolver().query(uri....)方法,且该uri的authority并没有与任何一个contentprovider绑定时,App会直接抛出异常,需要各位check自己的代码,使用contentResolver当作系统级别的观察者模式时,要有一个uri与之对应。
  4. sharedpreference中的MODE_WORLD_WRITEABLE模式在targetapi为26时,会直接返回空,如果需要使用进程之间共享数据,请使用contentprovider或者其他可靠的方案
  5. 涉及到暴漏文件uri给外部应用例如使用系统方式打开pdf文件场景,需要声明在manifest文件里面声明fileprovider,并在生成uri时,使用FileProvider的getUriForFile()生成uri,这里要求对应的intent添加flag:FLAG_GRANT_READ_URI_PERMISSION,这样子外部应用才能访问该文件。
  6. 安卓提供的检测权限是否授予的api,在国产机上无法做到百分百可靠,具体表现1:有的ROM(例如oppo,小米)会有一个询问的选项,当相关权限设置为询问时,是否获得权限的接口返回为true即获得权限,但是在实际调用相关敏感权限api时,会动态弹出一个对话框,除非用户点击相关选项或者等待对话框消失,这个api才会继续走下去返回相关值(对话框大概会持续3s左右,如果这个api在主线程调用,且执行这个api前后均执行了耗时操作,有可能出现ANR,没尝试过),即使用户拒绝了这个权限,也不会导致崩溃,整体行为与targetsdk设置在23以下时国产ROM的处理相同
  7. 国产ROM动态权限的坑:针对特定的权限例如oppo手机上的CALL_PHONE,即使在设置项关闭了相关权限,contextCompat依旧返回app有该权限,此时需要针对具体的权限做特殊处理,例如日历读权限,就要从日历里面读一个日历读的操作,看返回值是否符合预期,不符合预期,则表示对应的日历读权限没有获取。具体实现参考AndPermission
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,640评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,269评论 19 139
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 13,131评论 2 59
  • ——文/黄豆老师( ﹡ˆoˆ﹡ ) 昨天大约走路走了二十公里有余,所以计步器虽然只是显示三万步,可我知道还...
    黄思明阅读 146评论 0 1
  • 俗话说,不从泥泞不堪的小道上迈过,就踏不上布满鲜花的大路。如果要决定去旅游,又何必怕风雨兼程呢?作为一名人民教师,...
    Suven阅读 554评论 0 1