2013-07-04 32 views
1

我有开始在该服务中我尝试捕获图像 服务活动,并将其保存到SD card.Original代码源是在这里告诉我,什么是错的服务http://easyandroidtutorials.blogspot.in/2012/09/capture-image-without-preview-as.html打开相机得到错误

错误

07-04 08:24:41.579: D/Camera(3036): app passed NULL surface 

从活动

Intent service = new Intent(context, CameraService.class); 
    context.startService(service); 

服务代码

public class CameraService extends Service 
{ 
//Camera variables 
//a surface holder 
private SurfaceHolder sHolder; 
//a variable to control the camera 
private Camera mCamera; 
//the camera parameters 
private Parameters parameters; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate() 
{ 
    super.onCreate(); 

} 
@Override 
public void onStart(Intent intent, int startId) { 
    // TODO Auto-generated method stub 
    super.onStart(intent, startId); 

    mCamera = Camera.open(); 
    SurfaceView sv = new SurfaceView(getApplicationContext()); 


    try { 
     mCamera.setPreviewDisplay(sv.getHolder()); 
     parameters = mCamera.getParameters(); 

     //set camera parameters 
     mCamera.setParameters(parameters); 
     mCamera.startPreview(); 
     mCamera.takePicture(null, null, mCall); 

    } catch (Throwable e) { 
     e.printStackTrace(); 
    } 


    //Get a surface 
    sHolder = sv.getHolder(); 
    //tells Android that this surface will have its data constantly replaced 
    sHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
} 



Camera.PictureCallback mCall = new Camera.PictureCallback() 
{ 

    public void onPictureTaken(byte[] data, Camera camera) 
    { 
     //decode the data obtained by the camera into a Bitmap 

     FileOutputStream outStream = null; 
     try{ 
      outStream = new FileOutputStream("/sdcard/Image.jpg"); 
      outStream.write(data); 
      outStream.close(); 
     } catch (Throwable e){ 
      Log.d("CAMERA", e.getMessage()); 
     } 
    } 
}; 


@Override 
public IBinder onBind(Intent intent) { 
    // TODO Auto-generated method stub 
    return null; 
} 
} 

回答

0

服务是用于那些必须在后台执行的任务。由于相机需要预览面,因此无法在服务中启动相机。

+0

http://easyandroidtutorials.blogspot.in/2012/09/capture-image-without-preview-as.html看到这个他们已经做到了这一点 – Anirban

+0

查看该文章下的评论,许多人都说它不工作。 –

+0

好的,有没有什么办法可以做到这一点**我想拍摄一个图像而无需打开相机应用程序,而无需预览它** – Anirban