热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

【拍照截图】Android系统拍照和截图

tjstudy:写在前面:android6.0权限未处理,这里只是对拍照和截图的过程进行了知识的清理总结。android6.0权限处理,可跳转到:大力哥的,http:dow

tjstudy:写在前面:
android 6.0 权限未处理,这里只是对拍照和截图的过程进行了知识的清理总结。
android6.0 权限处理,可跳转到:
大力哥的,http://download.csdn.net/detail/qq137722697/9602707
运行时,请求所有需要的6.0的权限,文件中直接有使用方法。

1、调用系统拍照

这里写图片描述

        //1、图片保存路径
        String path = Environment.getExternalStorageDirectory().getPath();
        file = new File(path, "/temp.jpg");
        imageUri = Uri.fromFile(file);

        //.....2、在点击事件中开启拍照意图
        //调用系统相机进行拍照 用系统的东西 隐式意图
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri); //指定调用相机拍照后的照片存储路径

        //3、onActivityResult()方法里面进行拍照成功与否的判断并进行处理
         switch (requestCode) {
            case CAMERA_OK:
                if (resultCode == RESULT_OK) {
                    showMess("拍照成功");
                    //显示拍照的照片
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                        ivGlobal.setImageBitmap(bitmap);
                } else {
                    showMess("拍照失败");
                }
                break;
          }

2、调用系统截图

这里写图片描述

        //1、图片保存路径
        String path = Environment.getExternalStorageDirectory().getPath();
        file = new File(path, "/temp.jpg");
        imageUri = Uri.fromFile(file);

        //.....2、在点击事件中开启截图意图
        //调用系统功能进行截图 用系统的东西 隐式意图
       Intent intent = new Intent("com.android.camera.action.CROP");
        intent.setDataAndType(imageUri, "image/*");
        // 下面这个crop = true是设置在开启的Intent中设置显示的VIEW可裁剪
        intent.putExtra("crop", "true");
        // aspectX aspectY 是宽高的比例,这里设置的是正方形(长宽比为1:1)
        intent.putExtra("aspectX", 1);
        intent.putExtra("aspectY", 1);
        // outputX outputY 是裁剪图片宽高
        intent.putExtra("outputX", 200);
        intent.putExtra("outputY", 200);
        intent.putExtra("return-data", false);//设置之后 onActivityResult 中data 就为null了
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);//设置裁剪之后的图片保存位置
        startActivityForResult(intent, CUT_OK);

        //3、onActivityResult()方法里面进行拍照成功与否的判断并进行处理
         switch (requestCode) {
            case CUT_OK:
                if (resultCode == RESULT_OK) {
                    showMess("裁剪成功");
                    try {
                        //将裁剪好的图片显示到界面上
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                        ivGlobal.setImageBitmap(bitmap);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                } else {
                    showMess("裁剪失败");
                }
                break;
          }

拍照成功,然后截图失败了。。。
测试手机:sonyE6886(6.0权限已经处理)
测试情况:情况1,拍照成功,但是截图失败。情况2,单纯的使用已有图片进行截图,失败,并且导致原图为0byte,不可见。
失败原因:截图过程中,源图Uri和裁剪后的结果图Uri位置冲突
解决方案:使用不同的Uri

3、个人理解记录

拍照和截图,都是通过隐式意图来开启系统界面,拍照需要设置图片的保存路径,截图则需要设置图片的源文件和截图之后图片的保存路径,这里设置的都是URI。
系统的拍照和截图是两个系统功能,拍照之后想要截图,可以在确定以及能够拍照成功的基础上再次调用系统的截图功能(在onActivity里面进行拍照成功与否的判断)。

4、调用系统拍照并且截图

在拍照成功的时候,进行截图。

    //重要代码和上面一致
    switch (requestCode) {
            case CAMERA_OK:
                if (resultCode == RESULT_OK) {
                    showMess("拍照成功");
                    clipPhoto();//开启截图
                } else {
                    showMess("拍照失败");
                }
                break;
            case CUT_OK:
                if (resultCode == RESULT_OK) {
                    showMess("裁剪成功");
                    try {
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));
                        ivGlobal.setImageBitmap(bitmap);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();
                    }
                } else {
                    showMess("裁剪失败");
                }
                break;
        }

拍照并且截图 demo:http://download.csdn.net/detail/u012391876/9660935


推荐阅读
  • 开发笔记:实验7的文件读写操作
    本文介绍了使用C++的ofstream和ifstream类进行文件读写操作的方法,包括创建文件、写入文件和读取文件的过程。同时还介绍了如何判断文件是否成功打开和关闭文件的方法。通过本文的学习,读者可以了解如何在C++中进行文件读写操作。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 本文讨论了在手机移动端如何使用HTML5和JavaScript实现视频上传并压缩视频质量,或者降低手机摄像头拍摄质量的问题。作者指出HTML5和JavaScript无法直接压缩视频,只能通过将视频传送到服务器端由后端进行压缩。对于控制相机拍摄质量,只有使用JAVA编写Android客户端才能实现压缩。此外,作者还解释了在交作业时使用zip格式压缩包导致CSS文件和图片音乐丢失的原因,并提供了解决方法。最后,作者还介绍了一个用于处理图片的类,可以实现图片剪裁处理和生成缩略图的功能。 ... [详细]
  • 本文详细介绍了GetModuleFileName函数的用法,该函数可以用于获取当前模块所在的路径,方便进行文件操作和读取配置信息。文章通过示例代码和详细的解释,帮助读者理解和使用该函数。同时,还提供了相关的API函数声明和说明。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 在说Hibernate映射前,我们先来了解下对象关系映射ORM。ORM的实现思想就是将关系数据库中表的数据映射成对象,以对象的形式展现。这样开发人员就可以把对数据库的操作转化为对 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • IOS开发之短信发送与拨打电话的方法详解
    本文详细介绍了在IOS开发中实现短信发送和拨打电话的两种方式,一种是使用系统底层发送,虽然无法自定义短信内容和返回原应用,但是简单方便;另一种是使用第三方框架发送,需要导入MessageUI头文件,并遵守MFMessageComposeViewControllerDelegate协议,可以实现自定义短信内容和返回原应用的功能。 ... [详细]
  • 本文讨论了编写可保护的代码的重要性,包括提高代码的可读性、可调试性和直观性。同时介绍了优化代码的方法,如代码格式化、解释函数和提炼函数等。还提到了一些常见的坏代码味道,如不规范的命名、重复代码、过长的函数和参数列表等。最后,介绍了如何处理数据泥团和进行函数重构,以提高代码质量和可维护性。 ... [详细]
author-avatar
achih
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有