这个问题出现的原因主要是由于在Android 7.0以后,用了Content Uri 替换了原本的File Uri,故在targetSdkVersion=24的时候,部分 “`Uri.fromFile()“` 方法就不适用了。 **File Uri 与 Content Uri 的区别** - File Uri 对应的是文件本身的存储路径 - Content Uri 对应的是文件在Content Provider的路径 所以在android 7.0 以上,我们就需要将File Uri转换为 Content Uri。具体转换方法如下:(需要使用的时候直接复制粘贴即可)

 /*** 转换 content:// uri** @param imageFile* @return*/public Uri getImageContentUri(File imageFile) {String filePath = imageFile.getAbsolutePath();Cursor cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String[] { MediaStore.Images.Media._ID },MediaStore.Images.Media.DATA + "=? ",new String[] { filePath }, null);if (cursor != null && cursor.moveToFirst()) {int id = cursor.getInt(cursor.getColumnIndex(MediaStore.MediaColumns._ID));Uri baseUri = Uri.parse("content://media/external/images/media");return Uri.withAppendedPath(baseUri, "" + id);} else {if (imageFile.exists()) {ContentValues values = new ContentValues();values.put(MediaStore.Images.Media.DATA, filePath);return getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);} else {return null;}}}

主要代码就是这样,下面写一个完整的调取系统相机的代码:

   File outputImage = new File(ct.getSDPath() + "/bhne/export/" + projectpath + "/", java.util.UUID.randomUUID().toString() + ".jpg");pathImage = outputImage.toString();try {if (outputImage.exists()) {outputImage.delete();}outputImage.createNewFile();} catch (Exception e) {e.printStackTrace();}Intent intentPhoto = new Intent("android.media.action.IMAGE_CAPTURE"); //拍照//Uri imageUri = Uri.fromFile(outputImage);//7.0之前的写法Uri imageUri = getImageContentUri(outputImage);//直接调用咱们上面写好的方法if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N){intentPhoto.putExtra(MediaStore.EXTRA_OUTPUT,FileProvider.getUriForFile(PictureActivity.this,"bhne.com.wlprojectapplication.fileprovider", outputImage));}else {intentPhoto.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(outputImage));}intentPhoto.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);startActivityForResult(intentPhoto, 3);
  Uri imageUri = getImageContentUri(outputImage);//直接调用咱们上面写好的方法

主要就是这一行代码,调用了上面所写的代码,还需注意的是需要在权限中声明一下:

 <application...><providerandroid:name="android.support.v4.content.FileProvider"android:authorities="bhne.com.wlprojectapplication.fileprovider"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/file_paths"></meta-data></provider>

然后在res文件下创建一个xml文件夹,在文件夹下创建新的xml文件,名字为file_paths:

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><external-path name="external_files" path="."/>
</paths>

基本上就是这样,以后希望长点记性。

Android7.0及以上打开相机闪退,startActivityForResult报错解决相关推荐

  1. idea2019打卡没多久就闪退_IDEA 2020.1打开时闪退的问题及解决方法(完美解决方法)...

    推荐阅读: 支持Java 14!Java开发工具IntelliJ IDEA 2020.1稳定版发布 https://www.jb51.net/softjc/720187.html IntelliJ I ...

  2. 电脑用计算机软件一直闪退,电脑软件打开后闪退或崩溃的解决办法

    原标题:电脑软件打开后闪退或崩溃的解决办法 电脑闪退的因素很多,除了跟用户自身操作失误有关外,也和电脑软硬件有很大关系,例如病毒.木马程序的破坏,使用了测试版和盗版软件,软件本身存在bug,软件和系统 ...

  3. intellij idea打开就闪退或关闭详细解决办法

    intellij idea打开就闪退或关闭详细解决办法 intellij idea打开就闪退或关闭详细解决办法 1.以管理员身份运行 2.如果是内存问题 3.其他 intellij idea打开就闪退 ...

  4. 在AVD上运行程序时,程序闪退并报错unfortunately,xx has stopped

    在AVD上运行程序时,程序闪退并报错unfortunately,xx has stopped 事实上,这个错误是事出有因的,而非AVD或者AS有问题. 由于刚开始学习安卓,所以还没有习惯如何对安卓程序 ...

  5. 【已解决】labelme编辑label时,闪退;报错“IndexError: list index out of range”

    当前虚拟环境: python     3.6.13 labelme   5.0.1 pip           21.3.1 1.IndexError: list index out of range ...

  6. kettle闪退问报错无法打开图形界面ETI安装问题

    1.安装JDK(版本1.6版本以上) 2.JDK环境变量配置如图(后面的值都是自己的安装目录): 3.第一种错误直接闪退找到data-integration目录下的Spoon.bat 右键记事本编辑, ...

  7. IDEA 2020.1打开时闪退的问题及解决方法

    之前使用idea旗舰版都是用po jie的版本,经常重启电脑就失效了,今天重启了电脑,idea旗舰版竟然点不开了,一点开,有个进度条走到一半,就闪退了,一脸懵逼!!! 在网上看了好多说修改idea的启 ...

  8. 电脑打开计算机的管理闪退怎么办,电脑软件打开后闪退或崩溃的解决办法

    电脑闪退的因素很多,除了跟用户自身操作失误有关外,也和电脑软硬件有很大关系,例如病毒.木马程序的破坏,使用了测试版和盗版软件,软件本身存在bug,软件和系统版本不兼容,驱动尤其是显卡驱动出错,电脑配置 ...

  9. tomcat闪退没有报错_Appium在Android平台几种常见报错的解决方案

    在Appium测试中,初学者也许会遇到以下报错或者问题: 1.urllib2.URLError: Appium运行中报错如上,有两种可能: (1)发现是由于自己手机上连接了代理,去掉代理,以上报错消失 ...

最新文章

  1. 标记-整理(Mark-Compact)
  2. redis深度历险_Redis的数据结构(内存具体怎么优化的)
  3. 女程序员在这里落脚啦
  4. free 显示系统内存的使用情况
  5. matlab中文免费版下载以及安装教程(超详细)
  6. MASM入门(二)MASM基本语法
  7. gradle dependsOn等记录玩转。
  8. 八爪鱼数据采集教程(一)
  9. win7找回快速启动栏
  10. UVa 12118 Inspector's Dilemma
  11. censo7安装mysql_centos7环境下在线安装mysql
  12. 单片机及接口课程设计报告-------基于音乐播放器
  13. 1047: 阿姆斯特朗数
  14. Python程序设计题库——第二章
  15. 基于SHCAN智能仪表的ECU检测系统ETest的开发
  16. 图文并茂详尽剖析圆排列问题
  17. Python机器学习-多元分类的5种模型
  18. C语言作业银行ATM系统,C语言银行存取款管理系统
  19. 江水平:我是如何通过互联网做装修生意的
  20. linux卸载先驱的命令是,【单选题】在Linux中,若要在同一行书写多条命令,命令之间应使用符号()分隔A. 转义字符\\ B. 分号; C. , D. 空格...

热门文章

  1. HBuilder安装与使用
  2. 算法 - 求两个自然数的最大公约数(C++)
  3. 利用 ARCHPR 暴力破解 压缩包解压密码
  4. python做网络测试工具一
  5. 蓝桥杯python组——猜生日
  6. APK瘦身记,如何实现高达53%的压缩效果
  7. 利用openssl 库制作证书以及验证
  8. 江苏计算机一级ppt视频,(江苏省计算机一级.ppt
  9. 攻防世界-看雪看雪看雪
  10. “被提拔3个月,我离职了”:给想做管理的人提个醒!