使用ACTION_IMAGE_CAPTURE时无法连接到相机服务

时间:2011-03-02 02:51:29

标签: android

我正在使用以下代码告诉系统我想拍照:

            Intent intent = new Intent(
                    android.provider.MediaStore.ACTION_IMAGE_CAPTURE, null);
            intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, Uri
                    .fromFile(new File(filePath)));
            startActivityForResult(intent, TAKE_PHOTO_ACTIVITY);

它第一次像冠军一样。后续尝试产生以下异常:

  

E / CameraHolder(8300):   java.lang.RuntimeException:失败   连接到相机服务   E / CameraHolder(8300):at   android.hardware.Camera.native_setup(母语   方法)E / CameraHolder(8300):at   android.hardware.Camera。(Camera.java:110)   E / CameraHolder(8300):at   android.hardware.Camera.open(Camera.java:90)   E / CameraHolder(8300):at   com.android.camera.CameraHolder.open(CameraHolder.java:100)   E / CameraHolder(8300):at   com.android.camera.Camera.ensureCameraDevice(Camera.java:1626)   E / CameraHolder(8300):at   com.android.camera.Camera.startPreview(Camera.java:1686)   E / CameraHolder(8300):at   com.android.camera.Camera.access $ 5800(Camera.java:94)   E / CameraHolder(8300):at   com.android.camera.Camera $ 5.run(Camera.java:949)   E / CameraHolder(8300):at   java.lang.Thread.run(Thread.java:1096)

我想我必须以某种方式释放相机对象,但由于我没有直接获取它,我不知道该怎么做。有人可以帮助我吗?

3 个答案:

答案 0 :(得分:1)

您不需要释放相机对象 - 甚至不可能因为您没有手柄。此对象在您正在调用的捕获活动中释放。

您是否始终使用相同的文件路径?如果是,请尝试每次生成一个唯一的。如果这没有帮助,它看起来很像设备特定的错误。

答案 1 :(得分:1)

Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
            startActivityForResult(cameraIntent, CAMERA_PIC_REQUEST);  

调用默认的相机活动。

并使用下一个代码来检索刚拍摄的照片:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == CAMERA_PIC_REQUEST) {
        Bitmap thumbnail = (Bitmap) data.getExtras().get("data");
        ImageView image = (ImageView) findViewById(R.id.photoResultView);
        image.setImageBitmap(thumbnail);
    }
}

并在清单文件中添加权限

<uses-feature
    android:name="android.hardware.camera" />
<uses-feature
    android:name="android.hardware.camera.autofocus" />

<uses-permission
    android:name="android.permission.CAMERA"></uses-permission>

希望这对你有用。

答案 2 :(得分:1)

我也有同样的问题。然后我提出了这个解决方案,它对我来说很好。

当您调用相机活动时,在EXTRA_OUTPUT中传递存储卡上的临时文件的Uri。当相机活动返回时,在onActivityResult()回调方法中,获取先前创建的临时文件,并将其添加到MediaStore。最后删除临时文件。