我試圖從onPreviewFrame(byte [] data,Camera camera)獲取數據。但它似乎並沒有工作。你看到這個代碼有什麼問題嗎?這其中大部分剛剛直起http://developer.android.com/training/camera/cameradirect.htmlAndroid onPreviewFrame回調未獲取相機
public class UAVCamera extends Thread {
Camera mCamera;
CameraPreview mPreview;
public UAVCamera(Context context) {
mPreview = new CameraPreview(context);
}
@Override
public void run() {
safeCameraOpen();
mPreview.setCamera(mCamera);
}
private boolean safeCameraOpen() {
boolean qOpened = false;
try {
releaseCameraAndPreview();
mCamera = Camera.open();
qOpened = (mCamera != null);
} catch (Exception e) {
//Log.e(getString(R.string.app_name), "failed to open Camera");
e.printStackTrace();
}
return qOpened;
}
private void releaseCameraAndPreview() {
mPreview.setCamera(null);
if (mCamera != null) {
mCamera.release();
mCamera = null;
}
}
}
這裏是我的預覽類
class CameraPreview extends ViewGroup implements SurfaceHolder.Callback {
SurfaceView mSurfaceView;
SurfaceHolder mHolder;
Camera mCamera;
CameraPreview(Context context) {
super(context);
mSurfaceView = new SurfaceView(context);
addView(mSurfaceView);
// Install a SurfaceHolder.Callback so we get notified when the
// underlying surface is created and destroyed.
mHolder = mSurfaceView.getHolder();
mHolder.addCallback(this);
mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
}
private void stopPreviewAndFreeCamera() {
if (mCamera != null) {
/*
Call stopPreview() to stop updating the preview surface.
*/
mCamera.stopPreview();
/*
Important: Call release() to release the camera for use by other applications.
Applications should release the camera immediately in onPause() (and re-open() it in
onResume()).
*/
mCamera.release();
mCamera = null;
}
}
public void setCamera(Camera camera) {
if (mCamera == camera) { return; }
stopPreviewAndFreeCamera();
mCamera = camera;
if (mCamera != null) {
try {
mCamera.setPreviewDisplay(mHolder);
} catch (IOException e) {
e.printStackTrace();
}
/*
Important: Call startPreview() to start updating the preview surface. Preview must
be started before you can take a picture.
*/
mCamera.startPreview();
mCamera.setPreviewCallback(new PreviewCallback() {
public void onPreviewFrame(byte[] data, Camera camera) {
}
});
}
}
@Override
public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void surfaceCreated(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
public void surfaceDestroyed(SurfaceHolder arg0) {
// TODO Auto-generated method stub
}
@Override
protected void onLayout(boolean arg0, int arg1, int arg2, int arg3, int arg4) {
// TODO Auto-generated method stub
}
}
這裏是我的活動
public class MainActivity extends Activity {
private UAVCamera uavCamera;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
uavCamera = new UAVCamera(this);
uavCamera.start();
}
}
我真的甚至不需要顯示圖片用戶。我只需要查看數據。有可能這樣做嗎?我在onPreviewFrame(byte [] data,Camera camera)上放置了一個斷點,但它永遠不會被擊中。
由於其他安全原因,這是不可能的。你甚至不能捕捉到前景的活動,除非圖像實際顯示在表面上。 – 2013-03-05 00:22:26
@rickster我有像你一樣的問題,onpreviewframe沒有調用,有任何解決方案? [我的問題](http://stackoverflow.com/q/29310279/4388898) – 2015-03-30 03:59:00