2015-09-25 104 views
1

我试图采取与相机背面的照片,然后把它在一个贡献莫过于字节我使用这个代码: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永远不会被调用。

回答

0

从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工作,用户可能不希望允许应用程序使用此权限。

+0

我在服务中说我不能在服务中使用该代码。 – Emma22