我正在使用以下代码告诉系统我想拍照:
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)
我想我必须以某种方式释放相机对象,但由于我没有直接获取它,我不知道该怎么做。有人可以帮助我吗?
答案 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。最后删除临时文件。