在开发 Android 应用时,总会涉及到获取打电话、地理位置、网络等敏感的用户信息的权限,在 Android 中,联系人、当前位置等这些敏感信息都是由 permissions 保护的,Android 6.0 Marshmallow(棉花糖)API 23 中使用了一种新的权限来代替目前的安装时 Permissions ,即:runtime permissions
。但当咱们打算赋予程序安装时权限的时候,总会遇到一些问题。本文由 OneAPM 工程师编译整理。html
Android 中对于权限的区分主要有两种,即应用程序在 Dalvik 虚拟机上运行时所拥有的权限和在文件系统上读写的 linux 权限。linux
在实际开发中,我所碰到最痛苦的问题就是文件的共享,共享文件涉及到一个发送者的应用程序建立一个可访问的 URI,和接收者的应用程序从该URI读取数据流。android
但在这个过程当中,总会遇到两个很常见的问题:网络
OneAPM Mi 能够实时分析 APP 的慢交互和慢的事务等,还能够对 APP 的崩溃进行抓取、分析,从不一样的维度分析崩溃,定位代码级别的问题,轻松实现Android 应用性能监控。性能
崩溃总览,直观分析崩溃次数、影响版本及类型等。操作系统
OneAPM 根据操做系统类型、设备型号、崩溃状态、崩溃路径、崩溃根源进行统计;更直观地管理全部 Crash。.net
OneAPM Interaction Trace 经过创建快照的方式;采集较慢的 Interaction 所涉及的所有性能指标,和当前的设备信息,以及设备后台运行的进程信息。code
经过分析发现,是由于权限的缘由,最后定位其简单的解决办法是使用外部存储,这样,全部的文件就是全局可读的。htm
在 Marshmallow 中,READ_EXTERNAL_STORAGE
是一个危险的权限,由于你须要在运行时候明确要求。blog
正常状况下,不是在全部地方都须要这个权限,若是发送者和接收者都正常的工做,他们共享文件时没有什么危险和错误。但问题是,这两个应用程序都须要处理共享文件的权限,特别是发送者的应用程序使用外部存储设备,而后接收者仍须要访问的状况下;即便你正确的完成了这些,仍是有其余的大量的应用程序,那些程序仍然须要使用外部存储共享。
一般状况下,咱们会想办法如何正确的共享这些文件,可是 Google 都已经帮咱们作了这些事情。共享文件的人应该阅读并遵循这些规则。同时,须要注意,若是你须要你的接收机端的应用程序获取一个 URI 的话,致使外部存储请求需READ_EXTERNAL_STORAGE
这个权限。
一、 接收一个 URI。
二、 尝试查询元数据的URI。
READ_EXTERNAL_STORAGE
权限。三、 读取来自 URI 的文件。
原文连接:http://blog.danlew.net/2015/10/07/sharing-files-on-android-in-a-world-with-runtime-permissions/