
自從 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 的設定,我們在第二篇文章講解。