Android7.0以上打开相机的权限更加严格了,有很多博客也是讲这些具体操作的,如果想更深入了解,请自行搜索,这里我只是列出使用的方法,第一行代码第二版的内容,打开相机的权限是基于android7.0,如果完整的按照书上内容写个demo,是可以实现的。这里面我综合了书上的内容,在加上从几篇博客上的总结,写了一个测试的Demo,运行在真机上是没问题(android8.0)。
下面说一下步骤
1、在AndroidManifest.xml文件下的《application》标签中定义一个《provider》内容提供者。

  <providerandroid:name="android.support.v4.content.FileProvider"android:authorities="你自己的包名"android:exported="false"android:grantUriPermissions="true"><meta-dataandroid:name="android.support.FILE_PROVIDER_PATHS"android:resource="@xml/provider_paths"/></provider>

2、在res文件目录下创建一个xml文件夹,里面生成一个provider_paths.xml文件

    <paths xmlns:android="http://schemas.android.com/apk/res/android"><!--"."表示所有路径--><external-path name="名字随便填" path="."/></paths>    

3、打开相机`

 private void openCamera() {//创建一个保存图片的路径File outputImage = new File(getExternalCacheDir(), "output_image.jpg");try {if (outputImage.exists()) {outputImage.delete();}outputImage.createNewFile();} catch (IOException e) {e.printStackTrace();}//如果android7.0以上的系统,需要做个判断if (Build.VERSION.SDK_INT >= 24) {ImageUri = FileProvider.getUriForFile(MainActivity.this, "com.example.myapplication.provider", outputImage);//7.0} else {ImageUri = Uri.fromFile(outputImage); //7.0以下}//利用隐式Intent 打开系统相机Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUri);startActivityForResult(intent, TAKE_PHOTO);//这里的TAKE_PHOTO是定义的一个静态常数变量
}

4、由于是startActivityForResult启动的系统相机,所以照完的照片可以用onActivityResult方法接受。

  protected void onActivityResult(int requestCode, int resultCode, Intent data) {switch (requestCode) {//截取相机拍照后的图片case TAKE_PHOTO:startPhotoZoom(ImageUri);//这里调用了截取图片的方法break;//返回截取后的结果case RESULT_REQUEST_CODE:if (resultCode == RESULT_OK) {try {Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(ImageUri));imageButton.setImageBitmap(bitmap);} catch (FileNotFoundException e) {e.printStackTrace();}}break;

4.1、截取图片的方法startPhotoZoom

 private void startPhotoZoom(Uri uri) {File CropPhoto = new File(getExternalCacheDir(), "Crop.jpg");//这个是创建一个截取后的图片路径和名称。try {if (CropPhoto.exists()) {CropPhoto.delete();}CropPhoto.createNewFile();} catch (IOException e) {e.printStackTrace();}ImageUri = Uri.fromFile(CropPhoto);Intent intent = new Intent("com.android.camera.action.CROP");intent.setDataAndType(uri, "image/*");if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); //添加这一句表示对目标应用临时授权该Uri所代表的文件}intent.putExtra("crop", "true");intent.putExtra("scale", true);intent.putExtra("aspectX", 1);intent.putExtra("aspectY", 1);//输出的宽高intent.putExtra("outputX", 300);intent.putExtra("outputY", 300);intent.putExtra("return-data", false);intent.putExtra(MediaStore.EXTRA_OUTPUT, ImageUri);intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());intent.putExtra("noFaceDetection", true); // no face detectionstartActivityForResult(intent, RESULT_REQUEST_CODE);//这里的RESULT_REQUEST_CODE是在startActivityForResult里使用的返回值。}

Android8.0以上打开相机并裁剪图片相关推荐

  1. 小米部分手机在相册或相机拍照裁剪图片时,出现错误问题

    小米部分手机在相册或相机拍照裁剪图片时,出现错误问题 Unable to load resource 0x00000000 from pkg=com.android.systemui 报错型号:Mi ...

  2. Unity for IOS 加载手机相册图片以及打开相机拍照获取图片

    Unity for IOS 加载手机相册图片以及打开相机拍照获取图片 最近想做一个使用unity for IOS获取手机图片的功能,所以就研究了一下 这里我们需要创建两个objective-c文件,最 ...

  3. Android 7.0 适配 FileProvider相机 相册 裁剪的使用

    Android7.0又加了一些新的东西,例如多窗口 通知栏发消息 等等,但是这些是一些功能的改变,可以说是很炫的进步,而我要说的是FileProvider这个杀千刀的Api,先来看一下官方解释: 上面 ...

  4. cocos creator 调用相机相册裁剪图片并上传到服务器

    大致思路就是creator里面js调用Java和object-c代码,调起系统相机相册,选取图库图片/拍照图片进行裁剪,然后转化为base64字符串,最后通过http post请求上传到服务器. Ja ...

  5. (复习)android 调用系统相机 图库 裁剪-图片上传-客服端-服务器

    引用转载http://www.cnblogs.com/eyu8874521/archive/2012/07/20/2600697.html 效果: 客服端代码: package com.cn.lxz. ...

  6. Android7.0调用系统相机和裁剪

    最近将项目的targetSdkVersion升级到了26,发现调用系统相机的时候报了下面这个错误: android.os.FileUriExposedException: file:///storag ...

  7. android8.0热点打开流程,从Setting到framework

    关键函数的调用流程如下: 热点的开启能否成功,主要由以下几个因素影响 (1)WifiStateMachine.java中的状态异常,而引起状态异常的原因有很多,可能是由于我们在修改的过程中,发生了一些 ...

  8. Android 7.0下拍照和裁剪图片

    Android 7.0下拍照和裁剪图片 最近,公司的APP集中爆发了头像上传中拍照或照片裁剪的bug,让我才意识到及时学习Android新特性是多么重要,一个过去式的APP是无法一直满足日益变化的新需 ...

  9. opencv打开相机实时采集与处理

    下面是opencv官方文档中的一个例子, 演示了如何打开相机,获取图片,对图片进行处理 main函数也不需要输入参数,配置好环境直接就可以运行 把处理函数进行修改,就可以实现不同的功能 /* Open ...

最新文章

  1. Javascript 中的神器——Promise
  2. 必须认识的http请求包
  3. java JDBC连接Oracle数据库的方法
  4. 【UAV】从单个螺旋桨到四旋翼无人机运动学分析
  5. 使用PHP发送邮件的两种方法
  6. ASP.NET Core 中的 ORM 之 Dapper
  7. 【代码收集】提前载入贴图
  8. 洛谷P3390 【模板】矩阵快速幂
  9. 集成学习—GBDT原理理解
  10. linux下tab作用的描述?
  11. django mysql 登陆界面_django 简单实现登录验证给你 Django用户登录验证跳转问题
  12. Java工程师两周面试突击-中华石杉-Java面试
  13. 【MarkDown】基础语法
  14. Comparator.comparing比较排序
  15. java sort 降序_详解Java sort()数组排序(升序和降序)
  16. 物联网 DFrobot 掌控版 人工智能测温实验
  17. 记一次被“呼死你”电话骚扰的反骚扰经历
  18. Unity插件之天气系统UniStorm
  19. c程序设计语言克尼汉,《C程序设计语言(第2版新版)典藏版》 —3.4 switch语句...
  20. ios android 换手机通讯录备份,用iPhone如何备份/恢复通讯录?

热门文章

  1. 未来的计算机事业作文600字,模块计算机考试的感想
  2. 【学习OpenCV4】键盘鼠标操作总结
  3. UG NX 12 鼠标操作
  4. [HNOI2006]鬼谷子的钱袋
  5. 【超标量】分支预测的方向预测总结
  6. Latex在论文中输出微米和cm-1
  7. 使用机器学习预测大盘
  8. SEO网站优化真的比其他网络推广方式好吗,优势在哪里?
  9. iphone原彩显示对眼睛好吗_iphonex原彩显示有必要开吗
  10. juyter显示决策树图形_在Jupyter Noteb中绘制交互式决策树