跳到主要內容

Error : android.os.FileUriExposedException

android.os.FileUriExposedException


RootCause:從Android 7.0開始,一個應用提供自身檔案給其它應用使用時,如果給出一個file://格式的URI的話,應用會丟擲FileUriExposedException。這是由於谷歌認為目標app可能不具有檔案許可權,會造成潛在的問題。
Solution: 使用FileProvider
code java
Uri uri=FileProvider.getUriForFile(context,                  context.getApplicationContext().getPackageName(), imgFile);
//                 Uri uri = Uri.fromFile(imgFile);

or

FileProvider.getUriForFile(context,      context.getApplicationContext().getPackageName(), mCsvFile)


android mainfest
<provider    android:name="android.support.v4.content.FileProvider"    android:authorities="PackageName.fileprovider"    android:exported="false"    android:grantUriPermissions="true">    <meta-data        android:name="android.support.FILE_PROVIDER_PATHS"        android:resource="@xml/file_paths" /></provider>

add xml file 
file name file_paths
<?xml version="1.0" encoding="utf-8"?><resources>    <paths>        <root-path name="root" path=""/>        <files-path name="files" path=""/>        <files-path name="Pictures" path="Pictures"/>        <cache-path name="cache" path=""/>        <external-path name="external" path=""/>        <external-files-path name="external_file_path" path=""/>        <external-cache-path name="external_cache_path" path=""/>    </paths></resources>




留言

這個網誌中的熱門文章

IOS Swift 在某路徑下產生檔案 txt json

語法:         func createFile(name: String , fileBaseUrl: URL ){             let manager = FileManager . default                          let file = fileBaseUrl. appendingPathComponent (name)             print ( "文件: \ ( file )" )             let exist = manager. fileExists (atPath: file. path )             if !exist {                 let data = Data (base64Encoded: "aGVsbG8gd29ybGQ=" ,options:. ignoreUnknownCharacters )                 let createSuccess = manager. createFile (atPath: file. path ,contents:data,attributes: nil )                 print ( "文件產生结果: \ ( createSuccess )" )             } ...

Android平台下使用GStreamer How to build GStreamer

  GStreamer 環境建置 設備環境 : OS: Windows 10 專業版 Android Studio: 4.0.1 classpath 'com.android.tools.build:gradle:3.1.4' GStreame SDK : 1.18.4     1.       GStreame 官方網站,下載 GStreameSDK 點選 android Tutorials 官方安裝說明 點選 GStreamer binaries   下載 GStreameSDK ,這邊點選 1.18.4 tarball 及 Android NDKs used r21 GStreameSDK 解壓縮內容 建立資料夾命名 GStreameSDK ,存放至 C:\GStreameSDK\1.18.4\ Android NDK 2.       下載 GStreamer 官方範例,點選左邊連結連至 GStreame gitlab ,並點選 gst-doc s 下載範例 gst-docs 3.       載入專案,點選 File->New->ImportProject 新增 gradel.properties gstAndroidRoot = C \:\\ GStreamerSDK \\ 1.18.4 此路徑為剛下載的 GStreamerSDK 位置 gradel.properties 畫面 中間會出現 Exception 錯誤 修改為 ->Exception 出現 GStreamer 未能使用,將 GStreamer.java 複製至專案內 複製位置,將所有 tutorials1-4 資料夾內都複製貼上 編譯完成顯示在實機上