在开发 Android 应用时,总会涉及到获取打电话、地理位置、网络等敏感的用户信息的权限,在 Android 中,联系人、当前位置等这些敏感信息都是由 permissions 保护的,Android 6.0 Marshmallow(棉花糖)API 23 中使用了一种新的权限来代替目前的安装时 Permissions ,即:runtime permissions 。但当我们打算赋予程序安装时权限的时候,总会遇到一些问题。本文由 OneAPM 工程师编译整理。

Android 中对于权限的区分主要有两种,即应用程序在 Dalvik 虚拟机上运行时所拥有的权限和在文件系统上读写的 linux 权限。

在实际开发中,我所碰到最痛苦的问题就是文件的共享,共享文件涉及到一个发送者的应用程序创建一个可访问的 URI,和接收者的应用程序从该URI读取数据流。

但在这个过程中,总会遇到两个很常见的问题:

  • 1、 创建一个 URI 是相对较容易的,但是赋予这个权限可能就会非常困难。
  • 2、receiver 预计 URI 将接收的是一个文件,但是如果这个 receiver 写的不是很好,给这些 receiver 一个相对更加通用的URI的时候,这些 receiver 可能就不知道该如何处理,而有可能引发一些意想不到的崩溃等。

OneAPM Mi 可以实时分析 APP 的慢交互和慢的事务等,还可以对 APP 的崩溃进行抓取、分析,从不同的维度分析崩溃,定位代码级别的问题,轻松实现Android 应用性能监控


崩溃总览,直观分析崩溃次数、影响版本及类型等。


OneAPM 根据操作系统类型、设备型号、崩溃状态、崩溃路径、崩溃根源进行统计;更直观地管理所有 Crash。


OneAPM Interaction Trace 通过建立快照的方式;采集较慢的 Interaction 所涉及的全部性能指标,和当前的设备信息,以及设备后台运行的进程信息。

通过分析发现,是因为权限的原因,最后定位其简单的解决办法是使用外部存储,这样,所有的文件就是全局可读的。

在 Marshmallow 中,READ_EXTERNAL_STORAGE 是一个危险的权限,因为你需要在运行时候明确要求。

正常情况下,不是在所有地方都需要这个权限,如果发送者和接收者都正常的工作,他们共享文件时没有什么危险和错误。但问题是,这两个应用程序都需要处理共享文件的权限,特别是发送者的应用程序使用外部存储设备,然后接收者仍需要访问的情况下;即使你正确的完成了这些,还是有其他的大量的应用程序,那些程序仍然需要使用外部存储共享。

通常情况下,我们会想办法如何正确的共享这些文件,但是 Google 都已经帮我们做了这些事情。共享文件的人应该阅读并遵循这些规则。同时,需要注意,如果你需要你的接收机端的应用程序获取一个 URI 的话,导致外部存储请求需READ_EXTERNAL_STORAGE这个权限。

具体过程:

1、 接收一个 URI。

2、 尝试查询元数据的URI。

  • 如果成功,则没有什么问题。
  • 如果失败,则请求 READ_EXTERNAL_STORAGE 权限。

3、 读取来自 URI 的文件。

原文链接:http://blog.danlew.net/2015/10/07/sharing-files-on-android-in-a-world-with-runtime-permissions/

Android 共享文件的 Runtime 权限的更多相关文章

  1. android中获取root权限的方法以及原理(转)

    一. 概述 本文介绍了android中获取root权限的方法以及原理,让大家对android 玩家中常说的“越狱”有一个更深层次的认识. 二. Root 的介绍 1. Root 的目的 可以让我们拥有 ...

  2. Android开发——Android M(6.0) 权限解决方案

    Android开发--Android M(6.0) 权限解决方案 自从Android M(6.0)发布以来,权限管理相比以前有了很大的改变,很多程序员发现之前运行的好好的Android应用在Andro ...

  3. android 应用使用Root权限执行linux命令

    要让Android应用使用Root权限,首先Android设备必须已经获得Root权限.之后可以通过下面的代码取得process对象. Process process = Runtime.getRun ...

  4. Android 6.0 - 动态权限管理的解决方案

    Android 6.0版本(Api 23)推出了很多新的特性, 大幅提升了用户体验, 同时也为程序员带来新的负担. 动态权限管理就是这样, 一方面让用户更加容易的控制自己的隐私, 一方面需要重新适配应 ...

  5. 【转】Android M(6.0) 权限爬坑之旅

    原文网址:https://yanlu.me/android-m6-0-permission-chasm/ 有一篇全面介绍Android M 运行时权限文章写的非常全面:Android M 新的运行时权 ...

  6. Android 6.0的权限问题

    Android 6.0的权限获取不同于别的版本,具体的实例如下: if (ContextCompat.checkSelfPermission(this, Manifest.permission.REA ...

  7. Android开发之深入理解Android 7.0系统权限更改相关文档

    http://www.cnblogs.com/dazhao/p/6547811.html 摘要: Android 6.0之后的版本增加了运行时权限,应用程序在执行每个需要系统权限的功能时,需要添加权限 ...

  8. android 6.0+ 动态权限 拒绝不再询问后跳转设置应用详情页面

    android 6.0+ 的权限 需要动态申请 这里的权限针对的是 敏感权限: SMS(短信) SEND_SMS RECEIVE_SMS READ_SMS RECEIVE_WAP_PUSH RECEI ...

  9. android 6.0 动态权限

    Android 6.0 动态权限: 除了要在AndroidManifest.xml中申请外,还需使用时,请求用户允许授权. 以下是需要单独申请的权限,共分为9组,每组只要有一个权限申请成功了,就默认整 ...

随机推荐

  1. centos vim 中文乱码解决方案

    1.安装中文包:yum -y groupinstall chinese-support   2.修改字符编码配置文件 vi /etc/sysconfig/i18n LANGUAGE="zh_ ...

  2. js动态生成按钮,页面用DIV简单布局

    今天朋友让我忙帮给写个页面,由于时间紧破,所以没有完善,暂时先贴出来,以后有时间了在做修改 <!DOCTYPE html><html><head><title ...

  3. 兼容IE6/IE7/IE8/FireFox的css hack

    兼容IE6/IE7/IE8/FireFox的css hack .color{ background-color: #CC00FF; background-color: #FF00009; *backg ...

  4. MVVM - 基础介绍

    MVVM模式:把页面UI和后台逻辑分开,这样做的好处是能使你的程序更容易测试,维护和改进.

  5. oracle添加表字段跟修改表字段属性

    添加字段 alter table mid_contactinfo add(status varchar(20),createdate varchar(50),modifydate varchar(50 ...

  6. ASP的高效率的分页算法.net,php同样可以参考

    一般习惯使用的有两种分页算法,一是传统的ADO分页,二是SELECT TOP分页算法.对于小型数据表,比如一两万的数据量的表,我倾向使用ADO算法,对于大型的数据表,则必须采用后者的算法了. 先来说说 ...

  7. 使用 ICharpCode.SharpZipLib 压缩指定目录结构

    今天做项目中遇见一个压缩问题,我的目录结构是树形菜单,文件在服务器存储是平面存储,没有目录结构,所以在下载指定目录的时候要构建目录结构,如下: 当我右键点击下载b目录文件夹的时候要Download   ...

  8. ASP.NET MVC中的统一化自定义异常处理

    当ASP.NET MVC程序出现了异常,怎么处理更加规范? 1. 最简单的方法是设置<customErrors/>节点 <customErrors>节点用于定义一些自定义错误信 ...

  9. linux 常见问题

    无root权限install do chmod u+w /etc/sudoers sudo vi /etc/sudoers 找到root   ALL=(ALL:ALL) ALL 在下面加一行: you ...

  10. 编程中的 if ()else() 语句

    例句    if()  else() double d = Convert.ToDouble(Console .ReadLine()); if (d >= 60 && d< ...