Camera intent.getData()在某些设备上返回null,主要在android 7.0

Posted

技术标签:

【中文标题】Camera intent.getData()在某些设备上返回null,主要在android 7.0【英文标题】:Camera intent.getData() return null in some devices,Mainly in android 7.0 【发布时间】:2018-02-13 16:47:46 【问题描述】:

Camera intent.getData() return null,在某些设备中。

启动相机以获得结果,

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            startActivityForResult(cameraIntent, CAMERA_REQUEST);

我尝试了以下代码获取图像Uri的路径,

public static Uri getImageUri(Context inContext, Bitmap inImage) 
        ByteArrayOutputStream bytes = new ByteArrayOutputStream();
        inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
        String path = MediaStore.Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
        return Uri.parse(path);
    

它会给我图像的 Uri,但 图像质量会变差。 任何帮助表示赞赏。

【问题讨论】:

【参考方案1】:

Camera intent.getData() return null,在某些设备中。

它应该为所有相机应用返回null

我尝试了以下代码获取图像 Uri 的路径

该代码不会“获取图像 Uri 的路径”。它将Bitmap 保存到一个随机的、未记录的文件中,然后从代表该内容的MediaStore 返回一个Uri

这也浪费了堆空间,因为您创建了一个ByteArrayOutputStream,将 JPEG 写入其中,然后将其全部丢弃。

画质会变差

一开始图像质量很差,因为您要求相机应用为您提供缩略图。使用EXTRA_OUTPUT 告诉相机应用保存全分辨率图像的位置,然后使用onActivityResult() 中的那个位置。 This sample app 演示了这一点。

【讨论】:

授予写入外部存储器的权限,同时在运行时检查权限

以上是关于Camera intent.getData()在某些设备上返回null,主要在android 7.0的主要内容,如果未能解决你的问题,请参考以下文章

android 手机拍照返回 Intent==null 以及intent.getData==null

安卓 Intent.getData() 为空

android.os.FileUriExposedException:通过 Intent.getData() 异常暴露在应用程序之外,同时共享 VCFile

Android报错: exposed beyond app through Intent.getData()

Android 调用手机浏览器的正确方式

将URI转换为位图的问题(2014):