除了调用第三方APP进行拍照外,我们还可以自己使用系统API来控制相机设备进行拍照。这个相对来说比较复杂。下面只讲比较关键的步骤。
1.声明权限
控制照相机我们需要声明使用照相设备的权限。
<uses-feature android:name="android.hardware.camera" android:required="true"/>
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />
我们声明feature的required
属性为true,这样没有相机设备的手机就没法安装APP。若设置为false,我们就需要在代码中检测是否具有相机设备,若有的话则开启拍照功能,否则需要禁用该功能。判断方法如下:
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA)){
photoBtn.setOnClickListener(this);
}else{
photoBtn.setVisibility(View.GONE);
}
if(getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)){
//开启自动聚焦模块
}
2.打开相机设备
打开相机设备就是获得相机的一个实例,它是IO操作,所以可能比较耗时。为了避免ANR,我们需要在onCreate
或onResume
方法中另开一个线程去执行IO操作。相机设备可能会被其他APP占用,这时调用Camera.open()
方法会抛出异常。安全地打开相机设备的代码如下:
@Override
protected void onResume() {
super.onResume();
//另开一个线程
new Thread(new Runnable() {
@Override
public void run() {
if(safeCameraOpen(0)){
mHandler.post(new Runnable() {
@Override