 自從 Android 上左 API 24 後,所有使用 Intent 進出的檔案路徑都要使用 FileProvider 的封裝才可以讓第三方的 APK 讀取得到,政策實行已久但是常常會也記不起語法,所以記錄一下。 ### 以前的方法 API 24- 下面是一個例子示範,以先前 ( API 24 之前 ) 的方法去把影片傳給第三方 APK 來播放 : ```java Uri.fromFile(new File("path/to/your/file")); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, getContentResolver().getType(uri)); startActivity(intent); ``` ### 現在的方法 API 24+ 現在需要使用 FileProvider 來封裝 URI,讓第三方的 APK 不知道真實檔案的位置 : ```js Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", new File("path/to/your/file")); Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(uri, getContentResolver().getType(uri)); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(intent); ``` 有一點要記住記住記住 (重要的事要說三次),必定要加以下這句才可以成功運行的,不然目標的 Intent Receiver 會讀不到檔案。 ```java intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); ``` 有關 FileProvider 的設定,我們在第二篇文章講解。