項目中把攝像頭預覽抽象了出來,可能很多模塊都會用到這個功能
如:教學模塊、教練學員登退籤、定時拍照、隨機拍照都需要這個功能。
設置模塊也需要預覽攝像頭的效果,檢查是否可用等等
模塊A
mserviceConnection = new AdditionServiceConnection();
Intent it = new Intent();
it.setAction(Constant.WISDON_MODULAR_DATA_ACTION_SERVICE);
context.bindService(it, mserviceConnection, Context.BIND_AUTO_CREATE);
public static final String WISDON_MODULAR_DATA_ACTION_SERVICE = "com.hst.cz.cam.aidl.CamModularService";
模塊A、綁定一個服務,指向com.hst.cz.cam.aidl.CamModularService,我們稱呼爲相機模塊,
public class AidlCamModularService extends Service {
ICamModularPush.Stub mBinder = new ICamModularPush.Stub() {
@Override
public byte[] getM(int arg0, int arg1) throws RemoteException {
return null;
}
@Override
public String push(String jsonStr) throws RemoteException {
int id = addJsonStr(jsonStr);
Intent intent = new Intent(context, BackService.class);
intent.putExtra("aidl", 0);
intent.putExtra("json", sendJsonArray[id - 1].toString());
context.startService(intent);
return null;
}
};
}
相機模塊啓動服務
public class BackService extends Service {
...
case 1: {
if (isExistUsbCamera()) {
cameraArray[i - 1] = Camera.open(0);
return true;
} else {
TTSControl.log("找不到攝像頭", context);
}
}
break;
case 2: {
if (isExistCVBSCamera()) {
cameraArray[i - 1] = Camera.open(7);
return true;
}
}
...
/*通過判斷驅動文件是否存在,來判斷設備*/
public boolean isExistUsbCamera() {
String path = "/dev/video0";
return new File(path).exists();
}