首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

相机返回时出现Nougat getUriForFile问题

是指在Android 7.0(Nougat)及以上版本中,使用相机拍照后获取图片的URI时出现的问题。

在Android 7.0之前的版本中,我们可以直接使用file:// URI来访问拍照后的图片文件。但是从Android 7.0开始,为了加强应用间的安全性,Google引入了FileProvider来替代直接使用file:// URI的方式。

FileProvider是一个特殊的ContentProvider,它可以为应用提供受控的文件访问。使用FileProvider,我们可以通过content:// URI来访问应用内部的文件,从而避免了直接使用file:// URI可能引发的安全问题。

解决Nougat getUriForFile问题的步骤如下:

  1. 在AndroidManifest.xml文件中添加FileProvider的配置:
代码语言:txt
复制
<manifest>
    <application>
        ...
        <provider
            android:name="androidx.core.content.FileProvider"
            android:authorities="com.example.myapp.fileprovider"
            android:exported="false"
            android:grantUriPermissions="true">
            <meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/file_paths" />
        </provider>
        ...
    </application>
</manifest>

其中,android:authorities属性指定了FileProvider的授权名称,android:resource属性指定了文件路径配置的XML资源文件。

  1. 创建file_paths.xml文件,定义文件路径配置:
代码语言:txt
复制
<paths>
    <external-path name="my_images" path="Pictures" />
</paths>

这里的配置指定了应用内部的Pictures目录作为文件路径,你可以根据实际需求进行修改。

  1. 在拍照或选择图片的代码中,使用FileProvider获取图片的content:// URI:
代码语言:txt
复制
// 获取图片文件
File imageFile = new File(getExternalFilesDir(Environment.DIRECTORY_PICTURES), "image.jpg");

// 获取FileProvider的URI
Uri imageUri = FileProvider.getUriForFile(this, "com.example.myapp.fileprovider", imageFile);

// 将URI传递给相机或图片选择器

这里的"com.example.myapp.fileprovider"应该与AndroidManifest.xml中的android:authorities属性保持一致。

至此,你就可以在Android 7.0及以上版本中正确地获取相机拍照后的图片URI了。

腾讯云相关产品推荐:

  • 腾讯云对象存储(COS):提供高可靠、低成本的云端存储服务,可用于存储图片等文件。详情请参考:腾讯云对象存储(COS)
  • 腾讯云移动直播(LVB):提供高清、低延迟的移动直播服务,可用于实时传输音视频数据。详情请参考:腾讯云移动直播(LVB)
  • 腾讯云人工智能(AI):提供丰富的人工智能服务,包括图像识别、语音识别、自然语言处理等。详情请参考:腾讯云人工智能(AI)
  • 腾讯云物联网(IoT):提供全面的物联网解决方案,可用于连接和管理物联网设备。详情请参考:腾讯云物联网(IoT)
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 关于相机拍照获取图片onActivityResult返回data 为null的问题

    调用相机拍摄方法 /** * capture new image */ protected void selectPicFromCamera() { if (...Build.VERSION_CODES.N){ intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile...sendImageMessage(cameraFile.getAbsolutePath()); } 此时发现 代码执行到 if(data==null)就结束了,问题为为什么拍摄相机的回调图片数据...data为null 查询发现: 照相机有自己默认的存储路径,拍摄的照片将返回一个缩略图,即data里面保存的数据。...也就是说,调用相机时指定了uri,data就没有数据,没有指定uri,data就有数据。 但是这个规律也不是适用于所有的安卓手机,红米和三星部分型号在没有指定uri,data依然没有数据。

    2.2K20

    office打开文件出现向程序发送命令出现问题_向文件发送命令错误

    今天说一说office打开文件出现向程序发送命令出现问题_向文件发送命令错误,希望能够帮助大家进步!!!...打开office报错提示向程序发送命令出现问题 在Windows 7 上,资源管理器中双击OFFICE 2007文档打开时经常会出现“向程序发送命令出现问题”,只打开了程序界面,文档却没有打开,再次双击文档图标才能打开...OFFICE图标(Word、Excel等都有效)上单击右键,然后选择“属性”,在属性对话框的“兼容性”选项卡中勾上“以管理员身份运行该程序”; 2) 双击一个文档打开,此时可能还会提示“向程序发送命令出现问题...“,没关系,把程序关掉; 3)再次打开OFFICE的“兼容性”设置,然后把“以管理员身份运行该程序”复选框的勾去掉; 以后再双击文档就可以直接打开了,不会再出现“向程序发送命令出现问题“的问题

    8K50

    解决tensorflowkeras出现数组维度不匹配问题

    经过多次安装不同版本的tensorflow 和 keras ,发现问题依旧存在。...而且在python环境下使用命令: import tensorflow 或者 import keras ,报错: /home/×××/anaconda2/lib/python2.7/site-packages...最终解决方法:在终端中使用命令: pip install h5py==2.8.0rc1 就可以正常使用了,不会再报数组唯独不匹配等问题了。...补充知识:keras 维度不对等问题 1.在windows下面找到keras的配置文件, 修改channel_last 或者channel_first C:\Users\Administrator\....linux下面找到keras的配置文件, 修改channel_last 或者channel_first /home/.keras/keras.json 以上这篇解决tensorflow/keras出现数组维度不匹配问题就是小编分享给大家的全部内容了

    1.8K10

    Android使用SurfaceView作为相机预览识图,视图被拉伸的问题

    网上已经有很多人提到过,导致这种现象的原因是,传入的相机预览图像长宽比例,与SurfaceView本身大小长宽比例不一致。...那么解决方法也非常简单,只要获取一下设备本身支持的相机比例,然后选择其中一个与SurfaceView实际比例(经常就是设备的长宽)最相近的即可。...下面的代码是创建一个用于相机预览的SurfaceView的过程: //继承SurfaceView并且实现SurfaceHolder.Callback接口 public class CameraPreview...} } @Override public void surfaceDestroyed(SurfaceHolder holder) { //摧毁释放相机的资源...= null; final Camera.Parameters p = mCamera.getParameters(); //特别注意此处需要规定rate的比是大的比小的,不然有可能出现

    3.9K80

    springboot+mybatis出现空指针异常出现问题及解决方法

    今天遇见了一个问题,困扰了一段时间,试了几种方法,但是还是解决不了,主要的精力还是放在了mybatis插入控制问题。但是对于空指针异常有多重问题引起。...下面来说明一下遇到的问题: 前端传过来的值为{pId: null},后端获取值是使用的是params.get()的方法,直接上代码 data: { items=[ {cardName=k111,...String pId = params.get(“pId”).toString(); –>优先使用String.valueOf()方法代替toString() 当程序代码需要对象的字符串表示形式,...如果你的对象的引用等于null,NullPointerException则会抛出, 使用静态String.valueOf方法,该方法不会抛出任何异常并打印”null” //使用这种方式则可以避免出现空指针异常...String pId = String.valueOf(params.get(“pId”)); 1 2 3 4 5 6 7 8 此外,使用mybatis插入空值出现异常,这个解决方法是将

    2.7K20
    领券