前一篇文章有对camera进行了一个整体的介绍,那从今天首先会从camera app来对camera的正常打开关闭流程进行介绍。
首先,camera app需要定义用到的各种权限,其中包含使用camera的权限、读写SD card的权限、访问地址信息的权限等等,如下即是摄像头权限定义。
<uses-permission android:name =""android.permission.CAMERA"/>
在定义了一系列的app权限后,第一次打开app会提示这些权限是否允许,并且在勾选了允许之后,就会进入到app的onCreate方法,如果做过android app开发的同学不会太陌生,这里就不多做阐述。一般在onCreate方法里会做一些app的初始化动作,比如camera app的页面布局,加载一些camera 的信息,然后就是打开camera的预览画面了。
那接下来就进入到今天的重点,camera app中涉及camera一系列api的调用flow。
1.首先camera app会有一个默认的camera去打开,首先app这边需要调用openCamera的接口去真正打开这样一个硬件设备,具体的实现会随着camera的架构一层一层调用到kernel里,kernel层里会对camera进行一系统上电,写寄存器等操作,这里就不多做详述,在讲述到kernel部分的时候会详细介绍。
接口如下:
public void openCamera(@NonNull String cameraId,
@NonNull final CameraDevice.StateCallback callback,
@Nullable Handler handler)
其中第一个参数是需要打开的camera的索引号的字符串,比如说camera的索引号是0,则这里传入的参数即 "0",
第二个参数是openCamera的回调函数,需要camera App自行实现,
第三个参数是第二个回调函数被调用所在的handler。
其中CameraDevice.StateCallback的定义如下:
public static abstract class StateCallback{
public abstract void onOpened(@NonNull cameraDevice