zoukankan      html  css  js  c++  java
  • android 7.0+、8.0+应用中点击拍照崩溃的解决办法

    在开发中,项目里面明明已经添加过拍照或者读取相册的权限,但是在点击拍照或者打开相册的时候应用会崩溃,报一下错误:

    Caused by: android.os.FileUriExposedException: file:///storage/emulated/0/com.yzs.nongfeike/20181105100312792.jpg exposed beyond app through ClipData.Item.getUri()

    简单查了一下是Android7.0+权限机制改变造成的。网上也有很多解决方法,有的需要在清单文件manifest中定义FileProvider,还需要在res下新建xml文件夹,并新建filepaths.xml.

    个人感觉这种比较麻烦,现在贴上我亲自测试有效的解决方法。

    Intent intentFromCapture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
            min_photo = saveFolder + "/" + ImageUtil.getImageName();
            file = new File(min_photo);
    
            int currentapiVersion = android.os.Build.VERSION.SDK_INT;
            //7.0以下
            if (currentapiVersion<24){
                intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
                startActivityForResult(intentFromCapture, PHOTO);
            }else{
                //7.0以上
                ContentValues contentValues = new ContentValues(1);
                contentValues.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
                Uri uri = this.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,contentValues);
                intentFromCapture.putExtra(MediaStore.EXTRA_OUTPUT, uri);
                startActivityForResult(intentFromCapture, PHOTO);
            }

    其实很简单,就是做一下手机安卓系统判定,7.0以下的执行原始调用方式。7.0以上的需要使用ContentValues属性,好了,今天就写到这里。

  • 相关阅读:
    pgrep 查询进程的工具
    shell脚本中>/dev/null的含义
    一条命令批量替换多个文件中字符串
    Centos 6.4上面用Shell脚本一键安装vsftpd
    centos 卸载vsftpd方法
    Centos 6.4上面用Shell脚本一键安装mysql 5.6.15
    SHELL学习笔记----IF条件判断,判断条件
    CentOS挂载新硬盘
    Linux fdisk 命令
    Linux df 命令
  • 原文地址:https://www.cnblogs.com/yzssoft/p/9969075.html
Copyright © 2011-2022 走看看