未经 WRITE_EXTERNAL_STORAGE 许可在 Android 8 上使用相机

Use Camera on Android 8 without WRITE_EXTERNAL_STORAGE permission

我正在尝试让我的应用程序捕获图像并将其发送到服务器,而不存储在文件系统中。

如果我这样做:

intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, SOME_REQUEST_CODE);

onActivityResult中我可以通过

提取图像
Bitmap photo = (Bitmap) data.getExtras().get("data");

但这只给我一个 缩略图

从文档看来,(其中一种?)获取全高清图像的方法是通过添加

指示相机应用程序将图像存储在某个外部位置
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);

然而这显然需要WRITE_EXTERNAL_STORAGE

考虑到我不需要将图像存储在文件系统中,因为无论如何我都是通过网络发送它,我认为请求额外的存储权限是违反 "ask only what you need" 原则的。那么是否有可能以某种方式在内存中获取全高清图像并避免询问用户存储许可?也许对于这种情况存在一些特殊的 FileProvider 路径类型?

我找到了这个答案: 但它没有使用 FileProvider(我必须在 Android 8 上使用它)并且似乎不适用于我的情况。

谢谢。

系统相机应用或第三方相机应用无法访问您应用的内部存储,您的应用也无法访问其他相机应用的内部存储。因此,外部存储似乎是您的应用程序和相机应用程序之间传输数据的唯一方式。

只需使用文件提供程序并保存到 getFilesDir 或 getExternalFilesDir,您不需要 WRITE 权限或询问用户..