Android Lollipop 上的 IntentService 中的相机失败
Android camera fails in IntentService on Lollipop
我正在尝试从 IntentService 在后台拍照。在 Android 4.4 上一切正常,但在 Android 5.1 上出现错误:
03-18 14:35:54.497 7659-8956/xyz.bringoff.proximityphoto.app E/InvisibleCameraService﹕ Can't use a camera: Fail to connect to camera service
我的代码如下所示:
private void handleActionShot() {
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
releaseCamera();
mCamera = getCameraInstance();
}
public Camera getCameraInstance() {
Camera c = null;
int numCams = Camera.getNumberOfCameras();
if (numCams > 0) {
try {
c = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
} catch (RuntimeException e) {
Log.e(TAG, "Can't use a camera: " + e.getMessage());
releaseCamera();
return null;
}
}
if (c != null) {
c.setParameters(getProperParametersForCurrentDevice(c));
c.lock();
}
return c;
}
我没有发现这两个 android 版本的相机请求之间有记录的差异。
我发现了一个问题。接收者用 STATE_OFFHOOK 捕获了两次意图,并分别启动了 IntentService 两次。我在第一次启动时得到一个相机实例,所以我第二次发现 onHandleIntent()
相机已经被锁定。所以,我在 onHandleIntent()
方法
中添加了一个检查
if (ACTION_SHOT.equals(action) && !mAlreadyRunning) {
mAlreadyRunning = true;
handleActionShot();
}
现在可以使用了。
我正在尝试从 IntentService 在后台拍照。在 Android 4.4 上一切正常,但在 Android 5.1 上出现错误:
03-18 14:35:54.497 7659-8956/xyz.bringoff.proximityphoto.app E/InvisibleCameraService﹕ Can't use a camera: Fail to connect to camera service
我的代码如下所示:
private void handleActionShot() {
mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
mProximity = mSensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY);
releaseCamera();
mCamera = getCameraInstance();
}
public Camera getCameraInstance() {
Camera c = null;
int numCams = Camera.getNumberOfCameras();
if (numCams > 0) {
try {
c = Camera.open(Camera.CameraInfo.CAMERA_FACING_BACK);
} catch (RuntimeException e) {
Log.e(TAG, "Can't use a camera: " + e.getMessage());
releaseCamera();
return null;
}
}
if (c != null) {
c.setParameters(getProperParametersForCurrentDevice(c));
c.lock();
}
return c;
}
我没有发现这两个 android 版本的相机请求之间有记录的差异。
我发现了一个问题。接收者用 STATE_OFFHOOK 捕获了两次意图,并分别启动了 IntentService 两次。我在第一次启动时得到一个相机实例,所以我第二次发现 onHandleIntent()
相机已经被锁定。所以,我在 onHandleIntent()
方法
if (ACTION_SHOT.equals(action) && !mAlreadyRunning) {
mAlreadyRunning = true;
handleActionShot();
}
现在可以使用了。