14.3.1 调用系统的拍照功能
2010-10-01 19:37
218 查看
14.3.1 调用系统的拍照功能
http://book.51cto.com 2010-06-22 14:19 李宁 中国水利水电出版社 我要评论(0)摘要:《Android/OPhone开发完全讲义》第8章Android服务,本章主要介绍了Android系统中的服务(Service)技术。Service是Android中4个应用程序组件之一。在Android系统内部提供了很多的系统服务,通过这些系统服务,可以实现更为复杂的功能,例如,监听来电、重力感应等。本节为大家介绍调用系统的拍照功能。
标签:Android OPhone Android OPhone开发完全讲义
[align=right]限时报名参加“甲骨文全球大会・2010・北京”及“JavaOne和甲骨文开发者大会2010”[/align]
14.3.1 调用系统的拍照功能
本节的例子代码所在的工程目录是src\ch14\ch14_systemcamera
读者可以先试试自己手机上的拍照功能。可能由于手机型号不同,拍照的方式和过程也可能不一样。在HTC Hero手机上进行拍照会由系统自动对焦,在对焦的过程中,屏幕上会出现一个白色的对焦符号(类似于中括号)。如果对焦成功,这个对焦符号就会变成绿色,如图14.8所示。
当对焦成功后,按手机下方的【呼吸灯】按钮进行拍照。在拍照后手机屏幕下方会出现两个按钮:【完成】和【拍照】按钮。如果对照片满意,单击【完成】按钮结束拍照。如果对照片不满意,单击【拍照】按钮继续拍照,上一次拍的照片将丢失。由于这两个按钮无法通过DDMS透视图截获,因此,只能截获所拍的照片,如图14.9所示。当完成拍照后,可以对照片做进一步处理,例如本节的例子将照片显示在ImageView中,如图14.10所示。
图14.8 对焦成功(HTC Hero) |
图14.9 拍照成功(HTC Hero) |
图14.10 在ImageVie中 显示照片(HTC Hero) |
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) { // 拍照Activity保存图像数据的key是data,返回的数据类型是Bitmap对象 Bitmap cameraBitmap = (Bitmap) data.getExtras().get("data"); // 在ImageView组件中显示拍摄的照片 imageView.setImageBitmap(cameraBitmap); } } super.onActivityResult(requestCode, resultCode, data); }
在默认情况下,系统的拍照Activity将照片保存在SD卡的DCIM\100MEDIA目录中(不同型号的手机可能保存的目录不同)。在拍照的过程中按手机下方的【menu】按钮会在屏幕的下方显示几个选项菜单。单击【分辨率】菜单项,会弹出一个只有一个分辨率选项的对话框(在HTC Hero手机上的分别率是624×416,如图14.11所示。这个分辨率可能随着手机型号的不同而不同,但分辨率都很小)。这就意味着所拍摄的照片分辨率不能大于624*416。如果将照片保存成大于这个分辨率,照片就会失真。而手机自带的拍照程序可以根据手机摄像头的最大分辨率设置多个照片分辨率,如图14.12所示。
图14.11 拍照Activity时可设置的 |
图14.12 拍照程序可设置的 |
根据官方文档的解释,在调用拍照Activity时通过MediaStore.EXTRA_OUTPUT指定照片保存的路径,可以允许拍摄分辨率更大的照片。原文如下:
The caller may pass an extra EXTRA_OUTPUT to control where this image will be written. If the EXTRA_OUTPUT is not present, then a small sized image is returned as a Bitmap object in the extra field. This is useful for applications that only need a small image. If the EXTRA_OUTPUT is present, then the full-sized image will be written to the Uri value of EXTRA_OUTPUT.
按着官方的解释,可以使用如下代码调用拍照Activity:
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File("/sdcard/test.jpg"))); startActivityForResult(intent, 1);
但经作者测试,在调用拍照Activity时设置EXTRA_OUTPUT并不起任何作用(仅对Android SDK 1.5)。这也许是Android SDK 1.5的一个bug,或官方文档描述有误。如果读者非要拍摄更大分辨率的照片,可以实现自己的拍照Activity来完成这个功能,这部分内容将在14.3.2节介绍。
虽然使用系统的拍照Activity无法拍摄更大分辨率的照片,但可以同时生成分辨率更小的照片。通过insertImage方法可以同时在/sdcard/DCIM/.thumbnails和/sdcard/DCIM/Camera目录中分别生成分辨率为50×50和208×312的图像(其他型号的手机也有可能是其他的分辨率)。调用insertImage方法的代码如下:
MediaStore.Images.Media.insertImage (getContentResolver(), cameraBitmap, null, null);
其中cameraBitmap是拍照Activity返回的Bitmap对象。
不仅可以调用系统的拍照Activity,而且可以调用系统的摄像Activity。摄像Activity对应的Action是MediaStore.ACTION_VIDEO_CAPTURE,调用方法与调用系统的拍照Activity相同。
[align=right]【责任编辑:云霞 TEL:(010)68476606】[/align]
相关文章推荐
- 14.3.1 调用系统的拍照功能
- FootStep 40、如何调用S60的系统摄像头功能进行拍照与摄像?
- Android 实现调用系统照相机拍照和录像的功能
- Android开发 调用系统相机相册图片功能,解决小米手机拍照或者图片横竖相反问题,及小米手机相册图片路径问题
- H5中调用系统拍照,录像,录音功能
- android调用系统相机实现拍照功能
- 对红米手机调用系统相机拍照功能的研究
- android调用系统相机实现拍照功能
- 调用系统相机,底部弹出拍照和相册选择,及上传功能
- Java乔晓松-android中调用系统拍照功能并显示拍照的图片
- android 调用系统相册和系统拍照功能的Demo
- 调用系统拍照或相册功能获取裁剪以后的图片
- android调用系统相机实现拍照功能
- AndroidAlbum 跳转到相册或者调用系统拍照的功能
- Andorid调用系统的拍照功能和系统图库对图片进行裁剪
- 调用系统拍照、录像、录音功能并播放的demo
- Android 调用系统的拍照与裁剪功能
- android中调用系统功能 来显示本地相册图片 拍照 视频 音频功能
- Android学习之调用系统相机实现拍照功能
- Android调用系统相机拍照,并且模仿实现水印相机简单功能