我正在尝试使我的应用捕获图像并将其发送到服务器,而不存储在文件系统中。
如果我这样做:
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
考虑到我不需要将图像存储在文件系统中,因为无论如何我都是通过网络发送图像的,所以我相信要求额外的存储权限违反了“只问您需要的东西”的原则。因此,是否有可能以某种方式在内存中获取完整的高清图像并避免询问用户存储许可?对于这种情况,也许存在一些特殊的FileProvider
路径类型?我找到了这个答案:Capture image without permission with Android 6.0,但是它不使用FileProvider(我必须在Android 8上使用它,并且似乎不适用于我的情况。
谢谢。
我正在尝试使我的应用捕获图像并将其发送到服务器,而不存储在文件系统中。如果我这样做:intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); ...
系统相机应用程序或第三方相机应用程序无法访问您应用程序的内部存储,您的应用程序也无法访问其他相机应用程序的内部存储,因此似乎无法避免外部存储在您的应用程序和相机应用程序之间通信数据是不可选项,因为点击的图片或视频可能尺寸较大)。
只需使用文件提供程序并将其保存到getFilesDir或getExternalFilesDir,就不需要WRITE权限。