Java mCamera.setpreview{@override onPreviewFrame()}无效 我想录制视频并分析服务中的当前位图 所以我在onStartCommand函数中注册了surfaceHolder.addCallback 并在surfaceCreated函数中设置mCamera.setPreviewCallback 当我启动该服务时,onPreviewFrame功能似乎无法工作

Java mCamera.setpreview{@override onPreviewFrame()}无效 我想录制视频并分析服务中的当前位图 所以我在onStartCommand函数中注册了surfaceHolder.addCallback 并在surfaceCreated函数中设置mCamera.setPreviewCallback 当我启动该服务时,onPreviewFrame功能似乎无法工作,java,android,Java,Android,我不知道为什么,有人能帮我一下吗 这是我的onStartCommand功能代码 @Override public int onStartCommand(Intent intent, int flags, int startId) { if (Util.checkCameraHardware(this)) { mCamera = Util.getCameraInstance(); if (mCamera != null) {

我不知道为什么,有人能帮我一下吗

这是我的
onStartCommand
功能代码

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
    if (Util.checkCameraHardware(this)) {
        mCamera = Util.getCameraInstance();
        if (mCamera != null) {
            SurfaceView sv = new SurfaceView(this);

            WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE);
            WindowManager.LayoutParams params = new WindowManager.LayoutParams(1, 1,
                    WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
                    WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH,
                    PixelFormat.TRANSLUCENT);


            SurfaceHolder sh = sv.getHolder();

            sv.setZOrderOnTop(true);
            sh.setFormat(PixelFormat.TRANSPARENT);


            sh.addCallback(new SurfaceHolder.Callback() {
                @Override
                public void surfaceCreated(SurfaceHolder holder) {
                    Camera.Parameters params = mCamera.getParameters();
                    mCamera.setParameters(params);
                    Camera.Parameters p = mCamera.getParameters();

                    List<Camera.Size> listSize;

                    listSize = p.getSupportedPreviewSizes();
                    Camera.Size mPreviewSize = listSize.get(2);
                    Log.v("TAG", "preview width = " + mPreviewSize.width
                            + " preview height = " + mPreviewSize.height);
                    p.setPreviewSize(mPreviewSize.width, mPreviewSize.height);

                    listSize = p.getSupportedPictureSizes();
                    Camera.Size mPictureSize = listSize.get(2);
                    Log.v("TAG", "capture width = " + mPictureSize.width
                            + " capture height = " + mPictureSize.height);
                    p.setPictureSize(mPictureSize.width, mPictureSize.height);
                    mCamera.setParameters(p);
                    try {
                        mCamera.setPreviewDisplay(holder);

    /***************************************************************************/
                        mCamera.setPreviewCallback(new Camera.PreviewCallback() {
                            @Override
                            public void onPreviewFrame(byte[] data, Camera camera) {
                                if (_calibrationsLeft == -1)
                                    return;

                                if (_calibrationsLeft > 0) {
                                    // Doing calibration !

                                    if (_currentFaceDetectionThread != null
                                            && _currentFaceDetectionThread.isAlive()) {
                                        // Drop Frame
                                        return;
                                    }

                                    // No face detection started or already finished
                                    _processTimeForLastFrame = System.currentTimeMillis()
                                            - _lastFrameStart;
                                    _lastFrameStart = System.currentTimeMillis();

                                    if (_currentFaceDetectionThread != null) {
                                        _calibrationsLeft--;
                                        updateMeasurement(_currentFaceDetectionThread.getCurrentFace());

                                        if (_calibrationsLeft == 0) {
                                            doneCalibrating();
                                            return;
                                        }
                                    }

                                    _currentFaceDetectionThread = new FaceDetectionThread(data,
                                            _previewSize);
                                    _currentFaceDetectionThread.start();

                                } else {
                                    // Simple Measurement

                                    if (_currentFaceDetectionThread != null
                                            && _currentFaceDetectionThread.isAlive()) {
                                        // Drop Frame
                                        return;
                                    }

                                    // No face detection started or already finished
                                    _processTimeForLastFrame = System.currentTimeMillis()
                                            - _lastFrameStart;
                                    _lastFrameStart = System.currentTimeMillis();

                                    if (_currentFaceDetectionThread != null)
                                        updateMeasurement(_currentFaceDetectionThread.getCurrentFace());

                                    _currentFaceDetectionThread = new FaceDetectionThread(data,
                                            _previewSize);
                                    _currentFaceDetectionThread.start();
                                }
                            }
                        });
     /****************************************************************************/
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    mCamera.startPreview();
                    MessageHUB.get().sendMessage(MessageHUB.LOG_PREVIEW, null);
                    mCamera.unlock();
                    calibrate();
                }

                @Override
                public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
                }

                @Override
                public void surfaceDestroyed(SurfaceHolder holder) {
                }
            });


            wm.addView(sv, params);

        } else {
            Log.d("TAG", "==== get Camera from service failed");

        }
    } else {
        Log.d("TAG", "==== There is no camera hardware on device.");
    }

    return super.onStartCommand(intent, flags, startId);
}
@覆盖
公共int onStartCommand(Intent Intent、int标志、int startId){
如果(使用checkCameraHardware(本)){
mCamera=Util.getCameraInstance();
if(mCamera!=null){
SurfaceView sv=新的SurfaceView(本);
WindowManager wm=(WindowManager)getSystemService(Context.WINDOW\u服务);
WindowManager.LayoutParams params=新的WindowManager.LayoutParams(1,1,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG\u WATCH\u Out\u TOUCH,
像素格式(半透明);
SurfaceHolder sh=sv.getHolder();
sv.setZOrderOnTop(真);
sh.setFormat(PixelFormat.TRANSPARENT);
sh.addCallback(新的SurfaceHolder.Callback(){
@凌驾
已创建的公共空白表面(表面持有人){
Camera.Parameters params=mCamera.getParameters();
mCamera.setParameters(参数);
Camera.Parameters p=mCamera.getParameters();
列表大小;
listSize=p.getSupportedPreviewSizes();
Camera.Size mPreviewSize=listSize.get(2);
Log.v(“标记”、“预览宽度=“+mPreviewSize.width
+“预览高度=“+mPreviewSize.height”);
p、 setPreviewSize(mPreviewSize.width、mPreviewSize.height);
listSize=p.getSupportedPictureSizes();
Camera.Size=listSize.get(2);
Log.v(“标记”、“捕获宽度=“+mPictureSize.width
+“捕获高度=”+mPictureSize.height);
p、 setPictureSize(mPictureSize.width,mPictureSize.height);
mCamera.setParameters(p);
试一试{
mCamera.setPreviewDisplay(支架);
/***************************************************************************/
mCamera.setPreviewCallback(新的Camera.PreviewCallback(){
@凌驾
预览帧上的公共无效(字节[]数据,摄像头){
如果(_calibrationsLeft==-1)
返回;
如果(_calibrationsLeft>0){
//正在校准!
如果(_currentFaceDetectionThread!=null
&&\u currentFaceDetectionThread.isAlive()){
//升降架
返回;
}
//没有人脸检测开始或已经完成
_processTimeForLastFrame=System.currentTimeMillis()
-_last framestart;
_lastFrameStart=System.currentTimeMillis();
如果(_currentFaceDetectionThread!=null){
_校准左--;
updateMeasurement(_currentFaceDetectionThread.getCurrentFace());
如果(_calibrationsLeft==0){
完成校准();
返回;
}
}
_currentFaceDetectionThread=新的FaceDetectionThread(数据,
_预览大小);
_currentFaceDetectionThread.start();
}否则{
//简单测量
如果(_currentFaceDetectionThread!=null
&&\u currentFaceDetectionThread.isAlive()){
//升降架
返回;
}
//没有人脸检测开始或已经完成
_processTimeForLastFrame=System.currentTimeMillis()
-_last framestart;
_lastFrameStart=System.currentTimeMillis();
如果(_currentFaceDetectionThread!=null)
updateMeasurement(_currentFaceDetectionThread.getCurrentFace());
_currentFaceDetectionThread=新的FaceDetectionThread(数据,
_预览大小);
_currentFaceDetectionThread.start();
}
}
});
/****************************************************************************/
}捕获(IOE异常){
e、 printStackTrace();
}
mCamera.startPreview();
MessageHUB.get().sendMessage(MessageHUB.LOG\u预览,空);
mCamera.unlock()
mCamera.stopPreview();