在安卓更新7.0的版本后,要调用相机拍照获取原图则需要先把拍摄后的内容保存到目录,然后再借助provider调出来显示,相比以前可以说十分繁琐,但为了摆脱马赛克画质的困扰,为了更好的用户体验,还是硬着头皮上吧

亮丽的苹果君:

在你的main_activity.xml:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="take"android:id="@+id/btntake"/><ImageViewandroid:layout_width="wrap_content"android:id="@+id/image"android:layout_centerHorizontal="true"android:layout_centerVertical="true"android:layout_height="wrap_content" />
</RelativeLayout>

在Mainfest.xml的application内定义provider:

  <activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity><providerandroid:authorities="comgin.example.root.hightqualitycame.fileprovider"
这个自定义,但引用时不能错android:name="android.support.v4.content.FileProvider"
这个照抄官网android:exported="false"android:grantUriPermissions="true"><meta-data android:name="android.support.FILE_PROVIDER_PATHS"这个不能乱动android:resource="@xml/file_paths"></meta-data>
这个写能下创建xml文件的位置</provider>
</application>

还是mainfest加入要用的权限

<uses-permission android:name="android.permission.CAMERA"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

右键res新建一个名叫xml的目录,在目录下创建file_paths.xml

<?xml version="1.0" encoding="utf-8"?>
<paths xmlns:android="http://schemas.android.com/apk/res/android"><external-pathname="codecity_image"
名字随意path="Pictures"></external-path>
这里要写图片存在的目录,不然会卡,而且不要全路径
</paths>

预备工作搞定最后写我们的MainActivity.java:


public class MainActivity extends AppCompatActivity {
Button button;
ImageView imageView;File  showPIC;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button=findViewById(R.id.btntake);imageView=findViewById(R.id.image);if (Build.VERSION.SDK_INT>=23){requestPermissions(new String[]{Manifest.permission.CAMERA,Manifest.permission.WRITE_EXTERNAL_STORAGE},2);
}//请求权限button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {dispafuckpic();}});}private void dispafuckpic() {Intent takepic=new Intent(MediaStore.ACTION_IMAGE_CAPTURE);if (takepic.resolveActivity(getPackageManager())!=null){//这代表你的app可以允许相机File photofile=null;try{photofile=cratephotofile();//去创建文件方法,获得图片路径创建的showPIC=photofile;if (photofile!=null) {String pathtofile = photofile.getAbsolutePath();
Log.e("testt","seee:"+pathtofile);Uri photouri=FileProvider.getUriForFile(MainActivity.this,"comgin.example.root.hightqualitycame.fileprovider",photofile);//把这个图片和其他app分享,AUTHORITY是自己定义的,第三个必须是完整的图片路径takepic.putExtra(MediaStore.EXTRA_OUTPUT,photouri);//把share的Uri放进选好的路径startActivityForResult(takepic,1);
}}catch (IOException e) {e.printStackTrace();}}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {super.onActivityResult(requestCode, resultCode, data);if (resultCode==RESULT_OK){if (requestCode==1){Bitmap bitmap=BitmapFactory.decodeFile(String.valueOf(showPIC));
//String.valueOf进行一个String转型imageView.setImageBitmap(bitmap);}}}public File  cratephotofile() throws IOException {//返回一个File类的文件String name=new SimpleDateFormat("YYYYMMdd_HHmmss").format(new Date());
//年月日小时分秒File stordir=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);//获得公共目录下的图片文件路径File image=File.createTempFile(name,".jpg",stordir);//1:字首2:后缀3:在哪个目录下return  image;}}

代码分析:
点击button调用dispafuckpic()方法,这个方法会执行调用相机和创建相机文件方法 cratephotofile(),它会把你拍照获得的相片保存在相应的Picture目录内,它返回的image赋值给全局变量showPIC,这个showPIC就是你的照片原图,最后转型成bitmap显示,大功告成。

坑:

Uri photouri=FileProvider.getUriForFile(MainActivity.this,"comgin.example.root.hightqualitycame.fileprovider",photofile);

comgin.example.root.hightqualitycame.fileprovider一定要和你在Mainfest定义的authorities属性一毛一样,要不然运行马上卡掉还不带提示(博主应为曾经因为这个bug浪费了一天)

Android调用相机拍照高清原图(兼容7.0)相关推荐

  1. android 调用相机拍照。适配到 Android 10

    Photograph 项目地址:donkingliang/Photograph 简介: android 调用相机拍照.适配到 Android 10 更多:作者   提 Bug 标签: android ...

  2. Android调用照相机展示高清图片及展示图片时图片倾斜问题

    Android调用照相机展示高清图片及展示图片时图片倾斜问题 一.概述 二.配置权限 三.封装CameraUtil工具类 1.Android调用照相机 2.调用系统相册 3.拍摄完毕或在相册选取好照片 ...

  3. android相机拍照代码,Android 调用相机拍照,适配到Android 10

    今天写的博客是关于Android调用手机相机拍照并显示图片.这是一个很常用的功能,并且这个功能在Android6.0.7.0.10.0等版本上实现都有所不同,需要对Android各个版本进行兼容适配, ...

  4. Android 调用相机拍照并保存

    不知不觉已经两年多已经没有写文章了,转眼间大学都要毕业了,也是有些唏嘘,今后会定期发表些文章,应该会以Android为主,也会夹杂其他领域的一些文章. 话不多说,今天做了一个小demo,就是调用相机拍 ...

  5. Android中拍照完就给图片加水印,Android调用相机拍照并添加水印

    最近项目提出新需求,要求在拍照后在图片上添加用户信息的水印,so,楼主重新整理封装了一个简单的拍照+水印的工具类,需求不同,仅供参考.文件操作及权限做了适配,支持androidN及以上版本,放心使用. ...

  6. Android调用相机拍照并添加水印

    最近项目提出新需求,要求在拍照后在图片上添加用户信息的水印,so,楼主重新整理封装了一个简单的拍照+水印的工具类,需求不同,仅供参考.文件操作及权限做了适配,支持androidN及以上版本,放心使用. ...

  7. android调用相机返回大图,Android调用相机拍照返回原图

    在开始之前,先说下正常调用相机的状况: 正常调用相机,在 Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); startActiv ...

  8. Android 调用相机拍照,适配到Android 10,2021必看

    //拒绝权限,弹出提示框. Toast.makeText(this,"拍照权限被拒绝",Toast.LENGTH_LONG).show(); } } } 申请权限后,就可以调起相机 ...

  9. android 拍照换头像,Android调用相机拍照,裁剪及更换头像功能的实现

    1,点击弹出popwindow,选择相机或者相册 这个就不多说了,在OnclickListener里写弹出的窗口位置和样式. 2,选择拍照功能,调用手机相机. ``` //调用相机 Intent in ...

最新文章

  1. 大厂面试喜欢考算法,该怎么破?
  2. Mac上配置 Sublime Text 使其使用 Python3
  3. Boost:符号symbols找到null的测试程序
  4. UI Blue crystall class sap_bluecrystal is added here to html node
  5. Boost智能指针——boost::scoped_ptr(使用及原理分析)
  6. Docker学习总结(20)——Docker 容器实践精华问答集锦
  7. spring事务 jdbc_Spring事务管理示例JDBC
  8. Linux系统中cgroup功能介绍
  9. cesium接入天地图影像与注记(经纬度)(cesium篇.70)
  10. 面试一家公司之前需要做的准备
  11. OSChina 周一乱弹 ——东京12G
  12. HTML5制作斑马线表格,HTML_CSS,JavaScript和MooTools制作斑马纹表格,简单的斑马纹表格,如果页面 - phpStudy...
  13. 【OpenCV入门教程之十一】 形态学图像处理(二):开运算、闭运算、形态学梯度、顶帽、黑帽合辑
  14. matlab 使用fprintf打印度数符号
  15. 41岁职场中年人深度劝告:一定要从小公司往大公司走
  16. 超强悍抓包工具和万能视频下载工具
  17. 华为云语音识别:一句话识别API调用
  18. 阿里云settings.xml配置
  19. 教你剪辑处理分割视频简单的方法
  20. 随机过程基础(6)--应用随机过程分析音乐(语音)信号(1)、随机序列功率谱(PSD)

热门文章

  1. sourceinsight 的好处_代码阅读神器——Sourceinsight
  2. Webpack:Loader学习—— Pitching Loader
  3. OpenCV3 和 Qt5 计算机视觉:1~5
  4. Linux 2.6内核的设备模型
  5. 什么是ASP .NET?
  6. 小白算法学习 凸包 graham
  7. 【Redis】Redis介绍
  8. uniapp开发公众号H5时用户缓存无法清除问题
  9. 考研复习时间安排初试篇
  10. js中拼接字符串遇到的单引号、双引号以及转义字符问题