Android Camera(二)

  次阅读 作者:智能小宝 来源:互联网 2015-09-29 10:15 我要评论(0)

构建一个Camera应用程序

某些开发可能想要在他们的应用中定制Camera的用户界面,或者要提供一些特殊的功能。创建定制化的Activity比使用Intent需要更多的代码,但它能够给你的户提供更好的体验。

以下是创建定制化的Camera界面的一般步骤:

1. 检查和访问Camera:创建代码来检查Camera和所申请访问的存在性;

2. 创建一个预览类:继承SurfaceView来创建一个Camera的预览类,并实现SurfaceHolder接口。这个类用来预览来之Camera的实施图像。

3. 构建一个预览布局:一旦有了Camera预览类,就可以把这个预览类和你想要的用户界面控制结合在一起来创建一个视图布局。

4. 针对采集建立监听:把监听器与响应用户动作(如按下按钮)的界面控制连接到一起来启动图像或视频的采集。

5. 采集和保存文件:针对真正采集的图片或视频,以及输出的保存来编写代码

6. 释放Camera:使用Camera之后,你的应用程序必须释放Camera,以便其他应用程序能够使用。

Camera硬件是一个必须要认真管理的共享资源,因此你的应用程序在使用它时,不能跟其他应用程序发生冲突。下文将讨论如何检查Camera硬件、如何申请对Camera的访问,如何采集图片和视频,以及在应用使用完成后如何释放Camera。

警告:在应用程序使用完Camera时,要记住通过调用Camera.release()方法来释放Camera对象。如果你的应用程序没有正确的释放Camera,所有的后续的视图对Camera的访问,包括你自己的应用程序,都会失败,并可能到你的或其他的应用程序关闭。

检查Camera硬件

如果你的应用程序没有使用清单特别的声明要使用Camera,那么就应该在运行时检查Camera是否有效。使用PackageManager.hasSystemFeature()方法,来执行这个检查,如下例代码所示:

/** Check if this device has a camera */

private boolean checkCameraHardware(Context context) {

if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){

// this device has a camera

return true;

} else {

// no camera on this device

return false;

}

}

Android设备能够有多个Camera,例如用于摄影的背面Camera和用于视频会话的前面Camera。Android2.3(API Level9)以后的版本允许你使用Camera.getNumberOfCameras()方法来检查设备上可用的Camera的数量。

访问Camera

如果你已经判断在应用程序所运行的设备上有Camera,你必须获取通过Camera实例才能申请访问它(除非使用Intent来访问Camera)。

使用Camera.open()方法来访问主Camera,并确保要捕获任何异常,如下例代码所示:

/** A safe way to get an instance of the Camera object. */

public static Camera getCameraInstance(){

Camera c = null;

try {

c = Camera.open(); // attempt to get a Camera instance

}

catch (Exception e){

// Camera is not available (in use or does not exist)

}

return c; // returns null if camera is unavailable

}

警告:在使用Camera.open()时,要始终检查异常。如果没有检查Camera是否被使用或是否存在,会导致你的应用程序被系统关闭。

在运行Android2.3(API Level9)以上的设备上,你能够使用Camera.open(int)方法来访问指定的Camera。上面的示例代码访问的是第一个Camera,也就是多个Camera的设备上背面的那个Camera。

检查Camera功能

一旦获得了访问Camera的权限,就可以使用Camera.getParameters()方法来获取更多的有关Camera能力的信息,这个方法返回一个Camera.Parameters对象。在使用API Level9以上的版本时,使用Camera.getCameraInfo()方法来判断Camera是在设备的前面还是后面,以及图像的方向。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...