3月 24, 2020 Android
![](https://cdn.19site.net/files/74/89/7489d4ec-af79-4a9a-b0e3-f0658719d274.png '因為沒找到 Free License 的 Android Logo,唯有自己畫一個')

自從 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 的設定,我們在第二篇文章講解。
過去文章
2025 (9)
4 (5)
3 (1)
2 (3)
2024 (25)
11 (3)
10 (3)
9 (1)
3 (18)
2022 (6)
10 (1)
6 (2)
5 (1)
3 (1)
1 (1)
2021 (21)
11 (7)
7 (1)
6 (2)
5 (2)
4 (6)
3 (2)
2 (1)
2020 (92)
12 (1)
11 (2)
10 (4)
9 (10)
8 (5)
7 (1)
6 (3)
5 (1)
4 (4)
3 (25)
2 (7)
1 (29)
2019 (57)
12 (25)
11 (7)
9 (25)