V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OneAPM
V2EX  ›  Android

Android 共享文件的 Runtime 权限

  •  
  •   OneAPM · 2015-12-09 16:40:35 +08:00 · 8186 次点击
    这是一个创建于 3271 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在开发 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 应用性能监控

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

    Crash 分析
    <a href="https://www.oneapm.com"><u>OneAPM</u></a> 根据操作系统类型、设备型号、崩溃状态、崩溃路径、崩溃根源进行统计;更直观地管理所有 Crash 。

    Interaction Trace
    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/

    目前尚无回复
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2946 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 03:50 · PVG 11:50 · LAX 19:50 · JFK 22:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.