前面记录了两篇关于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;