服务中的相机和onPreviewFrame

时间:2014-07-04 11:12:19

标签: android

我有一个服务可以打开前置摄像头并显示其预览。 现在我想对预览图像进行一些图像处理,因此我设置了一个预览回调。

我的问题是没有调用回调,我得到臭名昭着的Choreographer消息"跳过X帧......在其主线程上做了太多工作" 这看起来很奇怪,因为我目前在回调中所做的就是打印一条日志行。 此外,当我调试(通过ADT),并且我在日志打印行上打破时,它被调用(但是如果我让它运行,那么尝试在线上的某个时候打破它)。 这种情况发生在我在平板电脑上运行时(我不使用emultor),但是当我在手机上运行它(Nexus 5,比我的平板电脑更强)时,每次都成功调用回调,没有跳过任何帧

我的自定义surfaceholder surfaceCreated():

public void surfaceCreated(SurfaceHolder holder) {
    try {
        mCamera.setPreviewDisplay(holder);

    } catch (IOException e) {
        Log.d(TAG, "Error setting camera preview: " + e.getMessage());
    }
    try {
        mCamera.setPreviewCallback(new Camera.PreviewCallback() {

            public void onPreviewFrame(byte[] data, Camera arg1) {
                   Log.d("Freshub.BackgroundService", "onPreviewFrame Called!!");
            }
        });
    } catch (Throwable e) {
        e.printStackTrace();
    }
    mCamera.startPreview();
}

有关如何让它在我的平板电脑上运行的任何建议吗?

1 个答案:

答案 0 :(得分:0)

您无法在Service中执行此操作 official documentation州:

  

服务是一个应用程序组件,可以在后台执行长时间运行的操作,不提供用户界面

你应该在一个活动中进行。