Android 共享文件的 Runtime 權限

在開發 Android 應用時,總會涉及到獲取打電話、地理位置、網絡等敏感的用戶信息的權限,在 Android 中,聯繫人、當前位置等這些敏感信息都是由 permissions 保護的,Android 6.0 Marshmallow(棉花糖)API 23 中使用了一種新的權限來代替目前的安裝時 Permissions ,即:runtime permissions 。但當咱們打算賦予程序安裝時權限的時候,總會遇到一些問題。本文由 OneAPM 工程師編譯整理。html

Android 中對於權限的區分主要有兩種,即應用程序在 Dalvik 虛擬機上運行時所擁有的權限和在文件系統上讀寫的 linux 權限。linux

在實際開發中,我所碰到最痛苦的問題就是文件的共享,共享文件涉及到一個發送者的應用程序建立一個可訪問的 URI,和接收者的應用程序從該URI讀取數據流。android

但在這個過程當中,總會遇到兩個很常見的問題:網絡

  • 一、 建立一個 URI 是相對較容易的,可是賦予這個權限可能就會很是困難。
  • 二、receiver 預計 URI 將接收的是一個文件,可是若是這個 receiver 寫的不是很好,給這些 receiver 一個相對更加通用的URI的時候,這些 receiver 可能就不知道該如何處理,而有可能引起一些意想不到的崩潰等。

OneAPM Mi 能夠實時分析 APP 的慢交互和慢的事務等,還能夠對 APP 的崩潰進行抓取、分析,從不一樣的維度分析崩潰,定位代碼級別的問題,輕鬆實現Android 應用性能監控性能

崩潰總覽 崩潰總覽,直觀分析崩潰次數、影響版本及類型等。操作系統

Crash分析 <a href="https://www.oneapm.com"><u>OneAPM</u></a> 根據操做系統類型、設備型號、崩潰狀態、崩潰路徑、崩潰根源進行統計;更直觀地管理全部 Crash。.net

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

相關文章
相關標籤/搜索