在App中使用Camera的两种方式

1.调用系统相机,或者是具有相机功能的应用

2.自定义相机

案例一调用系统相机,在布局文件添加按钮,在主程序中添加按钮点击事件:

//隐式调用系统的相机应用Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivity(intent);

如何让自己的应用也有拍照功能:

在配置文件中注册intent-filter这样一个action就行了

不明白的可以学习一下隐式Intent

<intent-filter><action android:name="android.media.action.IMAGE_CAPTURE" /><category android:name="android.intent.category.DEFAULT" /></intent-filter>

如何获得拍照后的图片

点击按钮调用系统相机,拍照后将图片显示在ImageView中:

获得拍照后的数据图片,可以使用startActivityForResult(intent, REQ_1);调用系统相机,这样拍照完成后将返回的数据放到Intent中

Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, REQ_1);

然后使用重写onActivityResult方法接受数据,并显示在ImageView中

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if(resultCode == RESULT_OK){if (requestCode == REQ_1) {Bundle bundle = data.getExtras();Bitmap bitmap = (Bitmap) bundle.get("data");/*** 这里返回的数据只是一个缩略图,完整的图片有可能太大,造成内存溢出等*/myimage.setImageBitmap(bitmap);}}}

如何获取全部图片数据而不是缩略图呢

系统相机在拍照之后会把照片存储在一个指定的系统目录,

下面学习为相机指定拍照存储目录,并从指定的存储目录中获取拍照图片

储存路径

mFilePath = Environment.getExternalStorageDirectory().getPath();//获取sd卡路径mFilePath = mFilePath+"/"+"temp.png";

指定存储路径

 public void startCamera2(View view){//隐式调用系统的相机应用Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Uri photoUri = Uri.fromFile(new File(mFilePath));//intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);//指定系统拍照之后的存储路径startActivityForResult(intent, REQ_2);}

从拍照后从指定路径获取图片数据并显示

else if(requestCode == REQ_2){FileInputStream fis= null;try {fis = new FileInputStream(mFilePath);Bitmap bitmap = BitmapFactory.decodeStream(fis);//解析流,将流转化为bitmp对象myimage.setImageBitmap(bitmap);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}

权限配置

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

两种情况全部代码:

public class MainActivity extends Activity {private ImageView myimage;private static int REQ_1 = 1;private static int REQ_2 = 2;private String mFilePath;//记录存储路径@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);myimage = (ImageView) findViewById(R.id.myimage);mFilePath = Environment.getExternalStorageDirectory().getPath();//获取sd卡路径mFilePath = mFilePath+"/"+"temp.png";}public void startCamera(View view){//隐式调用系统的相机应用Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);startActivityForResult(intent, REQ_1);}public void startCamera2(View view){//隐式调用系统的相机应用Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);Uri photoUri = Uri.fromFile(new File(mFilePath));//intent.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);//指定系统拍照之后的存储路径startActivityForResult(intent, REQ_2);}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {// TODO Auto-generated method stubsuper.onActivityResult(requestCode, resultCode, data);if(resultCode == RESULT_OK){if (requestCode == REQ_1) {Bundle bundle = data.getExtras();Bitmap bitmap = (Bitmap) bundle.get("data");/*** 这里返回的数据只是一个缩略图,完整的图片有可能太大,造成内存溢出等*/myimage.setImageBitmap(bitmap);}else if(requestCode == REQ_2){FileInputStream fis= null;try {fis = new FileInputStream(mFilePath);Bitmap bitmap = BitmapFactory.decodeStream(fis);//解析流,将流转化为bitmp对象myimage.setImageBitmap(bitmap);} catch (FileNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}finally{try {fis.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}}}

相机拍照Camera相关推荐

  1. android录制视频横向,Android从零开始(26)(设置全屏+横屏、相机拍照、视频录制)(新)...

    相机拍照.视频录制相机拍照 全屏显示有两种方式: 在androidManifest.xml里面的application标签下设置 android:theme="@android:style/ ...

  2. 最接近WeChat的全屏自定义相机(Custom Camera)

    代码地址如下: http://www.demodashi.com/demo/13271.html 一.需求 最接近WeChat的全屏自定义相机(Custom Camera),拍照和预览都是全屏尺寸.使 ...

  3. 安卓自定义相机拍照功能全解(不调用系统相机)

    全栈工程师开发手册 (作者:栾鹏) 安卓教程全解 安卓实现一个相机的基本功能. 启动和释放相机 由于拍照功能一般需要实时预览,所以比较耗电,因此在窗口的恢复和暂停函数中需要启动和释放相机 privat ...

  4. 兼容Android 11 相机拍照,从相册中选择,裁剪图片

    由于android 11对存储空间进行了更新,导致无法进入裁剪或者裁剪后无法保存,返回路径等问题. android 10以下可以参考:android 相机拍照,从相册中选择,裁剪图片 前面部分和之前的 ...

  5. 微信小程序-从相册获取图片,视频 使用相机拍照,录像上传+服务器(nodejs版)接收

    在本文 微信小程序-从相册获取图片 使用相机拍照 本地图片上传之前需要看看 微信小程序-获取用户session_key,openid,unionid - 后端为nodejs 代码封装是在上文添加的. ...

  6. Android调用相机拍照高清原图(兼容7.0)

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

  7. uni-app 从本地相册选择图片或使用相机拍照

    终于弄懂这个选择图片的流程,删除了很多不需要的地方,最终得到的就是这个版本 页面部分 <view>上传图片 {{imageList.length}}/{{count}}</view& ...

  8. 微信小程录制视频上传服务器,微信小程序-从相册获取图片,视频使用相机拍照,录像上传+服务器nodejs版接收-微信小程序视频上传功能-微信小程序视频上传...

    在本文微信小程序-从相册获取图片使用相机拍照本地图片上传之前需要看看微信小程序-获取用户session_key,openid,unionid-后端为nodejs代码封装是在上文添加的.本文知识点:1. ...

  9. h5(网页) 调用相机拍照和相册,实现图片上传功能

    情景描述: 一个h5或者网页中需要上传图片功能,并且这个功能可以选择本地的图片或者拍照上传: 实现方法: 我们在网页中是可以直接调用手机的相机或者上传本地图片的,也就是说,我们是有使用本地图片文件和 ...

最新文章

  1. 怎么判断间隙过渡过盈配合_什么是配合间隙过盈过渡配合
  2. mysql 用drop和delete方法删除用户的区别
  3. 听说过OpenJDK,没说过OpenValueJDK吧?
  4. docker commit 命令
  5. Python Django通过牵引文件查看建表sql语句的命令sqlmigrate
  6. Java面试题:IO流的标准处理异常的代码
  7. jwt重放攻击_JWT+ASP.NET MVC 时间戳防止重放攻击
  8. java55矩阵output_将矩阵乘积输入到keras中的两个模型的输出
  9. 关于php调用.net的web service 踩过的坑
  10. 自助式BI和传统BI有什么区别
  11. 5个冷门的MacOS快捷键,小众但好用
  12. 《爱的博弈》(让婚姻持久保鲜的人际关系圣经)主要内容及大纲 免费下载
  13. uniapp 获取屏幕高度并赋值
  14. 使用Go语言解析多点触摸协议(MIT)TypeB由ADB调试产生的数据
  15. 【zblog】模板怎么安装?zblog主题安装教程
  16. 不同设备以及浏览器的userAgent值大全
  17. Edge被恶意篡改主页
  18. python 读excel字符型 数值_浅谈python 读excel数值为浮点型的问题
  19. 【超详细】多元线性回归模型statsmodels_ols
  20. 英语说10点20有计算机课,博雅课选课指南(1)

热门文章

  1. 小鑫的JAVA之路(1):JAVA概述
  2. VS studio msvc | 堆栈默认值 烫屯葺 0xCC、0xCD、0xFD、0xDD
  3. 在线预览 Word、Excel、PowerPoint 文档
  4. knn算法python代码_KNN 算法原理及代码实现
  5. autojump env: python: No such file or directory
  6. 从 单体架构 到 异地多活
  7. 用VC6 Build时冒出的一大堆Already defined错误
  8. pytorch中nn.Sequential
  9. Delayed Message 插件实现 RabbitMQ 延迟队列
  10. 谷歌SEO实战教程:谷歌排名第一秘籍,内容从入门到高阶,适合个人及团队