Android 5.1-手电筒应用小思路(三)

本文介绍了Android 5.1之后Camera类的过时,推荐使用Camera2 API来实现手电筒功能。通过CameraManager获取Camera设备,使用openCamera方法并结合CameraDevice.StateCallback回调来打开相机。利用CameraCharacteristics查询闪光灯特性,并通过CaptureRequest设置Flash_MODE_TORCH开启闪光灯。文章还展示了部分关键代码片段。
摘要由CSDN通过智能技术生成
 前面记录了两篇关于Android 4.4开发 Android手电筒小应用的一些心得,当然只是从上层来做一些简单的处理。
    然而随着Android的发展和更新,Android Camera类已被标识为过时的类,官方建议开发者使用Camera2。在Android官方文档中也提到过( Android官方开发指南-Camera(相机)。
在Android5.1之前版本的SDK中,看不到android.hardware.camera2,一般看到的都是android.hardware.camera类。android.hardware.camera在Android4.4的版本就已经过时
了,只不过在Android 4.4 SDK中并没有集成android.hardware.camera2,但是Android工程源码中是有的。
    这两者有多大区别呢,下面有图有真相,乍一看,小伙伴们都惊呆了,这差别也太大了。不过,我个人感觉,底层可能差别不会太大,只不过上层的封装方式变了。如果你熟悉Android的代码结构,光看android.hardware.camera2中的各个类名,你都能猜出Camera2 需要通过CAMERA_SERVICE 来使用。
           
    而在CameraManager.java中前面的注释也告诉我们需要通过Context.getSystemService()来获得这个类的一个实例,eg:
    CameraManager manager = (CameraManager)mContext.getSystemService(Context.CAMERA_SERVICE);
    要通过FLASH来实现手电筒,就要open camera,要使用CameraManager中的openCamera方法:
    public void openCamera(String cameraId, final CameraDevice.StateCallback callback,  Handler handler)
    很惊讶,怎么,openCamera()函数是 void类型。但他确实是这样的。cameraId 通过 getCameraIdList()来获取,此函数返回的是一个数组,并非是需要String 类型。也直接告诉我们,要获得CameraId 还需要做处理。按照正常的情况,一款手机通常有两个Camera,分前Camera和后Camera,这个在android.hardware.camera中就有代码表示(camerainfo):
    
/**
         * The facing of the camera is opposite to that of the screen.
         */
        public static final int CAMERA_FACING_BACK = 0;
        /**
         * The facing of the camera is the same as that of the screen.
         */
        public static final int CAMERA_FACING_FRONT = 1;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值