java - Android Cam 致命异常文件 URI 暴露

标签 java android kotlin

String caminhoFoto = getExternalFilesDir(null) + "/"+ System.currentTimeMillis() +".jpg";
            File arquivoFoto = new File(caminhoFoto);
            intentImage.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(arquivoFoto));

我写这段代码,错误在下面,我已经添加了提供者,没有 list 什么都没有,继续没有任何代码的错误,我被告知使用内容

错误:

FATAL EXCEPTION: main
              Process: br.com.viniciusdeep.agenda, PID: 22038
              android.os.FileUriExposedException: file:///storage/emulated/0/Android/data/br.com.viniciusdeep.agenda/files/1524003224785.jpg exposed beyond app through ClipData.Item.getUri()

最佳答案

在 Android 7.0 中,Uri 上的文件方案实际上被禁止了。如果你尝试 在 Intent 中传递一个 file: Uri 到另一个应用程序,您将因 FileUriExposedException 异常而崩溃。

将 file: Uri 值放入 ClipData 中的剪贴板时,您将面临类似的问题

这是来自 StrictMode 的更新版本。 StrictMode.VmPolicy.Builder 有一个 penaltyDeathOnFileUriExposure() 方法 触发文件检测:Uri 值和结果 FileUriExposedException 异常。而且,这似乎是预先配置的, 就像 StrictMode 是如何预先配置为应用 penaltyDeathOnNetwork()( NetworkOnMainThreadException 崩溃的来源)。

但是,这只有在您的 targetSdkVersion 设置为 24 或更高时才会启动。那时 点,您将需要找到其他方法将您的内容提供给其他应用程序,例如 通过名为 FileProvider 的类,或者,您也可以 通过配置您自己的 StrictMode.VmPolicy 并跳过来禁用检查 directFileUriExposure(),虽然这不是一个很好的解决方案。

关于java - Android Cam 致命异常文件 URI 暴露,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49927285/

相关文章:

java - 安卓自定义通知为空

android - 如何设置Genymotion时钟?

java - 为什么 Kotlin 使用 arrayOf 这样的全局函数

java - JSP 上不显示操作错误

java - 比较二维数组中的 2 个元素

java - 为什么 Javascript(在 Rhino 中运行)无法访问 java.lang.reflect.Method 实例上的方法?

android - appcompat-v7 :27. 0.1 播放服务 map 问题

android - 错误 :Module 'app' : platform 'Google Inc.:Google APIs:23' not found

java - Kotlin 数据类型是基于原始或非原始 Java 数据类型构建的吗?

intellij-idea - 我可以通过 Java API 对平台类型强制实现空安全吗?