從android7.0開始,android對訪問檔案的許可權收回,所以如果我們要在應用件共享檔案,應該傳送一項content://uri,並對這個uri授予臨時訪問的許可權。而對這個uri授權最簡單的方式就是使用fileprovider類。
具體的操作步驟是:
1.建立乙個path檔案:
在res下邊建立乙個xml的資料夾,在xml下邊建立乙個資源檔案,比如命名為filepaths(名字是自己隨便起的,只要和在manifest檔案中註冊provider時所引用的resource保持一致就行)
external-path代表的根目錄是:environment.getexternalstoragedirectory()
files-path代表的根目錄是:context.getfilesdir()
cache-path代表的根目錄是:getcachedir()
name:是自己定義的起的乙個名字。
path:.代表根目錄,代表可以向其他應用共享根目錄及其子目錄下的任何乙個檔案,如果將path設為path="image",代表只可以共享根目錄下的image資料夾,其他的資料夾是不能共享的。
<?xml version="1.0"encoding="utf-8"?>
<paths>
<external-pathname="external_path"path="."/>
paths>
2.在manifest檔案中註冊provider
name:是固定的
authorities:你應用的包名+.fileprovider,這裡的fileprovider可以隨便寫,只要與fileprovider.geturiforfile()方法中的第二個引數authority對應起來就行。
granturipermissions:固定值true,表示uri訪問授權
exported:固定值false
meta-data-name:固定值 android.support.file_provider_paths
<providerandroid:name="android.support.v4.content.fileprovider"android:authorities="com.example.android.imagecut.fileprovider"android:exported="false"android:granturipermissions="true"><meta-dataandroid:name="android.support.file_provider_paths"android:resource="@xml/file_paths"/>
provider>
3.**中呼叫:
if(environment.getexternalstoragestate
().equals(environment.
media_mounted
)) intent intent =
newintent(mediastore.
action_image_capture
);
if (build.version.sdk_int >= 24)
else
startactivityforresult(intent,
request_carema
);}
以上就是實現訪問檔案的一種方式。
strictmode.vmpolicy.builder builder =newstrictmode.vmpolicy.builder();strictmode.setvmpolicy(builder.build());
builder.detectfileuriexposure();
加了這些**以後就能繼續按照以前的方式訪問了。
第一種方式完整**:
Android 7 0呼叫相機方法
android 7.0之後呼叫相機的方式不允許以file 的方式呼叫,需要以共享檔案的方式content url contentvalues contentvalues new contentvalues 1 contentvalues.put mediastore.images.media.dat...
android 7 0呼叫相機閃退問題
背景 在安卓7.0手機上,呼叫系統相機拍照,結果出現閃退。原因 android7.0中為了提高私有檔案的安全性,禁止向你的應用外公開 file uri。如果一項包含檔案 file uri型別 的 intent 離開你的應用,應用失敗,並出現 fileuriexposedexception 異常。解決...
Android7 0 之 直接啟動
搬運工.當裝置已開機但使用者尚未解鎖裝置時,android n 將在安全的 直接啟動 模式下執行。為支援此操作,系統為資料提供兩個儲存位置 預設情況下,應用不會在 直接啟動 模式下執行。如果您的應用需要在 直接啟動 模式下進行操作,您可以註冊在此模式期間應執行的應用元件。對於需要在 直接啟動 模式下...