takePicture服务无法正常工作
问题描述:
我试图采取与相机背面的照片,然后把它在一个贡献莫过于字节我使用这个代码:takePicture服务无法正常工作
Camera camera = Camera.open();
SurfaceView view = new SurfaceView(getApplicationContext());
SurfaceHolder holder = view.getHolder();
camera.getParameters().setPreviewSize(1, 1);
camera.setPreviewDisplay(holder);
camera.startPreview();
camera.takePicture(null, pictureCallback, null);
但它无法正常工作。我没有得到一个例外,但pictureCallback永远不会被调用。
答
从Android文档摘自:http://developer.android.com/training/camera/photobasics.html
你应该调用摄像头的意图是这样的:
首先添加必要的权限,您的应用程序在androidmanifest文件:
<manifest ... >
<uses-feature android:name="android.hardware.camera"
android:required="true" />
...
</manifest>
之后请拨打相应的启动相机的意图:
static final int REQUEST_IMAGE_CAPTURE = 1;
private void dispatchTakePictureIntent() {
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
}
}
从相机将在下面的方法,在那里,你想,你将能够存储或使用它被称为接收数据:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_IMAGE_CAPTURE && resultCode == RESULT_OK) {
Bundle extras = data.getExtras();
Bitmap imageBitmap = (Bitmap) extras.get("data");
mImageView.setImageBitmap(imageBitmap);
}
}
如果你想在一个服务来实现这一点,采取从这个link的代码,你应该能够采取从服务一个画面:
mPreview = new CameraPreview(this, mCamera, jpegCallback);
WindowManager wm = (WindowManager) this
.getSystemService(Context.WINDOW_SERVICE);
WindowManager.LayoutParams params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.WRAP_CONTENT,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
PixelFormat.TRANSPARENT);
params.height = 1;
params.width = 1;
wm.addView(mPreview, params);
如前所述所作的评论,请注意,这需要许可SYSTEM_ALERT_WINDOW工作,用户可能不希望允许应用程序使用此权限。
我在服务中说我不能在服务中使用该代码。 – Emma22