2015-09-24 109 views
1

我想從相機作爲服務使用圖像。並使用下面的代碼,我從什麼地方上google-在後臺服務中從相機中捕捉圖像

import java.io.FileOutputStream; 
import java.io.IOException; 
import android.app.Service; 
import android.content.Context; 
import android.content.Intent; 
import android.graphics.Bitmap; 
import android.hardware.Camera; 
import android.hardware.Camera.Parameters; 
import android.os.IBinder; 
import android.util.Log; 
import android.view.SurfaceHolder; 
import android.view.SurfaceView; 

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; 

    boolean mPreviewRunning = false; 


/** 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(getBaseContext()); 


    try { 

     Camera.Parameters p = mCamera.getParameters(); 
     mCamera.setParameters(p); 
     mCamera.startPreview(); 

     mCamera.takePicture(null, null, mPictureCallback); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     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 mPictureCallback = new Camera.PictureCallback() { 
    public void onPictureTaken(byte[] imageData, Camera c) { 
     Log.e("Callback TAG", "Here in jpeg Callback"); 

     if (imageData != null) { 
      FileOutputStream outputStream = null; 
      try { 
       outputStream = new FileOutputStream("/sdcard/car_final/Image.jpg"); 
       outputStream.write(imageData); 

       // Removed the finish call you had here 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } finally { 
       if (outputStream != null) try { 
        outputStream.close(); 
       } catch (IOException ex) { 
        // TODO Auto-generated catch block 
        ex.printStackTrace(); 
       } 
      } 

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

得到這個,但我得到以下異常 - Error message

請幫助我。我搜查了但沒有收到任何東西。 在此先感謝。

+0

此代碼可能會在某些設備上運行。它使用不受支持的功能:未連接到窗口的SurfaceView。實際上,可以從服務中準備一個將在Window上的View。 –

+0

你是對的這段代碼適用於某些設備,並且不適用於其他設備。謝謝回覆。 –

+0

[android - 使用後臺服務中的相機]的可能重複(http://stackoverflow.com/questions/6901542/android-use-camera-from-within-background-service) –

回答

0

我在運行一個類似的代碼時發現了相同的錯誤,我找到了here

爲了解決這個問題,我加

SurfaceTexture st = new SurfaceTexture(MODE_PRIVATE); 
mCamera.setPreviewTexture(st); 

mCamera.startPreview();之前Viren Kheni here的建議。

相關問題