在開發 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 應用性能監控。性能
崩潰總覽,直觀分析崩潰次數、影響版本及類型等。操作系統
<a href="https://www.oneapm.com"><u>OneAPM</u></a> 根據操做系統類型、設備型號、崩潰狀態、崩潰路徑、崩潰根源進行統計;更直觀地管理全部 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/