原先有適配過,但是當時就copy能用就行了。最近在寫輪子工具,就再次查了下資料,就順便整個都了解一下,記錄下來。
建立provider資料
...
...
引數
說明android:name
你可以使用v4包提供的fileprovider或者自定義的只需要在name申明就好了,一般使用系統的就足夠了。
android:authorities
類似schema,命名空間之類。
android:exported
false表示我們的provider不需要對外開放。
android:granturipermissions
申明為true,你才能獲取臨時共享許可權。
在res中建立配置檔案
按上面的名字我們需要建立乙個file_paths路徑檔案
**如下
<?xml version="1.0" encoding="utf-8"?>
以上name是代表生成的新uri的時候的拼接名稱,path代表前面引數路徑後拼接的內容
具體說明如下
引數說明
files-path
呼叫context.getfilesdir()路徑下的檔案 例/data/user/0/包名/files
cache-path
呼叫context.getcachedir()路徑下的檔案 例/data/user/0/包名/cache
external-cache-path
呼叫context.getexternalcachedir()路徑下的檔案 例/storage/emulated/0/android/data/包名/cache
external-files-path
呼叫context.getexternalfilesdir(string)路徑下的檔案 例/storage/emulated/0/android/data/包名/files/music
external-path
呼叫environment.getexternalstoragedirectory()路徑下的檔案 例/storage/emulated/0
uri api24以上的呼叫
在7.0(api24)之前直接開啟檔案**如下
string mimetype = gettypefromsuffix(file);
uri uri = uri.fromfile(file);
if (mimetype != null)
在7.0(api24)以後需要用新的方法 修改如下
string mimetype = gettypefromsuffix(file);
uri uri = uri.fromfile(file);
if (mimetype != null) else
intent.setdataandtype(uri, mimetype);
context.startactivity(intent);
}
其中fileprovider
是string fileprovider = ".fileprovider";
其實這段就是最早上面清單檔案的android:authorities
內的值
加入的兩個flags是intent.flag_grant_read_uri_permission
(臨時讀取許可權)和intent.flag_grant_write_uri_permission
(臨時寫入許可權)
統一出現的gettypefromsuffix(file)
方法是用來獲取檔案的字尾生成mimetype
讓系統開啟對應的檔案工具
android7.0適配總結
谷歌中國 - android 7.0 行為變更
安卓6 0 檔案儲存許可權管理
由於安卓6.0更新了許可權管理,使用最新的sdk編譯的時候,快取到自定義的目錄下出現問題,因為沒有獲取對應的許可權,6.0以前的系統不需要獲取許可權,最快的方式是使用官方推薦的快取位址 不推薦 public static string path environment.getexternalstor...
安卓學習筆記 9 檔案共享到其他應用
在intent中,我們可以使用putextra string,bundle 來向其他的activity傳遞資料,其內部提供了如下的幾個型別 extra alarm count用於告訴應用程式正在被呼叫的應用程式有多少個正在等待的警報 extra bcc一串盲文複製的e mail郵件位址 extra ...
Node14 檔案路徑
node.js中的檔案路徑主要有以下幾種 dirname filenameproces.cwd 其中前三個是絕對路徑,後兩個是相對路徑 可以通過path.resolve轉換為絕對路徑 我現在的目錄結構是這樣的 d projects path test path.jspath.js const pat...