拍照-----------android系统 至关重要的功能
一 在Android 中,拍照对应的Action 是android.provider.MediaStore.ACTION_IMAGE_CAPTURE. 用于拍照的Activity 需要返回照片图像数据,
摄像对应的Action 是android.provider.MediaStore.ACTION_VIDEO_CAPTURE
因此需要使用startActivityForResult()来启动 Activity .代码如下:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent,1);
截获 Activity 返回的图像数据的事件方法是onActivityResult ,代码如下:
protected void onActivityResult(int requestCode, int resultCode, Intent data){
if(requestCode == 1){
if(resultCode == Activity.RESULT_OK){
Bitmap bitmap = (Bitmap)data.getExtras().get("data"); // 拍照 Activity 保存图像数据的 key 是 data,返回的数据类型是 Bitmap 对象
imageView.setImageBitmap(bitmap); // 在 ImageView 组件中显示拍摄的照片
}
}
super.onActivityResult(requestCode, resultCode, data);
}
系统拍照功能 具体代码请参见 ch14_systemcamera 工程
注意: 使用系统的拍照 通常很难拍摄大辨率的照片,但可以生成分辨率更小的照片.通过insertImage 方法可以同时在 /sdcard/DCIM/.thumbnails 和 /sdcard/DCIM/Camera 目录中分别生成分辨率为 50 X 50 和 208 X 312的图像, 代码如下:
MediaStore.Images.Media.insertImage(getContentResolver(), cameraBitmap,null,null);
其中 cameraBitmap 是拍照 Activity 返回的 Bitmap对象
二 实现用户自定义拍照 Activity
拍照的核心类是 android.hardware.Camera,通过Camera类的静态 open 可以获得Camera对象,并通过Camera 类的startPreview 方法开始拍照,最后通过Camera 类的takePicture 方法结束拍照,并在相应的事件中处理照片数据
具体步骤如下:
1 指定用于显示拍照过程影像的容器,通常是SurfaceHolder 对象。
2 在拍照过程中涉及到一些状态的变化: 这些状态包括开始拍照(对应surfaceCreated 事件方法);拍照状态变化(对应surfaceChanged 事件方法); 结束拍照(对应surfaceDestroyed 事 件 方法)。这3个方法都是在SurfaceHolder.Callback 接口中定义的, 因此,需要使用SurfaceHolder 接口的addCallback 方法指定 SurfaceHolder.Callback 对象,以便实现这3种方法
3 拍完照后需要处理照片数据。处理这些数据的工作需要在PictrueCallback 接口的onPictureTaken方法中完成。当调用Camera 类的takePicture 方法后,onPictureTaken 方法被调 用.
4 如果需要自动对焦,需要调用Camera 类的 autoFocus 方法.该方法需要一个 AutoFocusCallback 类型的参数值. AutoFocusCallback 是一个接口,在该接口中定义了一个onAutoFocus 方法,当摄像头正在对焦或对焦成功都会调用该方法.
具体代码请参见 ch14_camera工程
特别注意: 用户自定义的拍照功能必须声明权限 <uses-permission android:name="android.permission.CAMERA" /> ,但在调用系统提供的拍照功能时并不需要声明!
相关文章
- 基于Android系统的自动化环境搭建
- Android,iOS打开手机QQ与指定用户聊天界面
- Android Binder原理(五)系统服务的获取过程
- Android的系统服务一览
- Android开发之Intent跳转到系统应用中的拨号界面、联系人界面、短信界面
- Android基础-系统架构分析,环境搭建,下载Android Studio,AndroidDevTools,Git使用教程,Github入门,界面设计介绍
- android 通过WIFI调试和adb指令推送文件到安卓设备
- Android 软键盘自动弹出和关闭
- 基于 Android NDK 的学习之旅-----序言
- Android Studio 完美修改应用包名
- Android设置虚线、圆角、渐变
- Android中如何查看内存(下)
- 【VLC-Android】Mac下编译vlc-android
- Android系统进程间通信Binder机制在应用程序框架层的Java接口源代码分析
- Android权限设置android.permission完整列表
- Android蓝牙——HID开发
- win上搭建react-native android环境
- Android图形显示系统——上层显示1:界面绘制大纲---android的GUI系统
- Android 面试必备:高工必问Binder机制~
- Android系统信息获取
- Unity Android Studio 混合开发整理 - 附有详细操作步骤(Unity 2019.3 + 嵌入 Android Studio 4. + 应用中)
- cocos2d-x 3.0 android mk文件 之 自己主动遍历*.cpp文件
- Android系统到底安不安全?细数Android7.0 Nougat的几大安全增强功能
- 【树莓派】在树莓派的Android系统中安装APK应用
- 【树莓派】树莓派刷Android系统
- android_我的第一个Android程序
- 【测试】Android CTS系统测试指导手册【详细版】
- Android开发学习路线图