用js 解决Android 7.0及以上版本文件暴露异常exposed beyond app through Intent.getData()的方法
时间: 2024-03-10 13:47:54 浏览: 13
在 Android 7.0 及以上版本中,系统加强了对应用间数据隐私的保护,如果一个应用试图通过 Intent.getData() 方法获取另一个应用私有目录下的文件,就会抛出 "exposed beyond app through Intent.getData()" 异常。
为了解决这个问题,你可以使用 FileProvider 类来共享文件,具体步骤如下:
1. 在 AndroidManifest.xml 文件中添加如下代码:
```
<manifest>
<application>
...
<provider
android:name="android.support.v4.content.FileProvider"
android:authorities="${applicationId}.fileprovider"
android:grantUriPermissions="true"
android:exported="false">
<meta-data
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/file_paths" />
</provider>
...
</application>
</manifest>
```
2. 在 res/xml 目录下创建 file_paths.xml 文件,添加如下代码:
```
<paths>
<external-path name="external_files" path="." />
<files-path name="files" path="." />
</paths>
```
这里的 external-path 和 files-path 分别对应外部存储和内部存储的文件路径,如果你的文件存储在其他路径,需要相应地修改。
3. 在你需要共享文件的地方,使用如下代码获取文件 Uri:
```
File file = new File("文件路径");
Uri uri = FileProvider.getUriForFile(context, context.getPackageName() + ".fileprovider", file);
```
其中,context 是你的上下文对象,file 是你要共享的文件路径。
4. 将 Uri 添加到 Intent 中,并添加 FLAG_GRANT_READ_URI_PERMISSION 标记:
```
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "application/pdf");
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
startActivity(intent);
```
这里以打开 PDF 文件为例,你需要根据实际情况修改 MIME 类型。FLAG_GRANT_READ_URI_PERMISSION 标记会授予目标应用访问该 Uri 的权限。
通过以上步骤,你就可以在 Android 7.0 及以上版本中共享文件了。