Android &引用;“表面”;LogCat中的标记错误

Android &引用;“表面”;LogCat中的标记错误,android,surfaceview,logcat,Android,Surfaceview,Logcat,在开发一个非常基本的相机应用程序时,我遇到了一系列非常具体的错误。代码与android网站上的代码几乎相同 Galaxy SII是唯一一款在LogCat控制台中显示以下错误的手机: 06-28 16:28:40.098: E/Surface(1650): Surface::init token -2 identity 18 “identity”后面的数字会更改(42、38等),但错误仍然存在 我认为这可能与以下类别有关,但仍不确定其含义: public class CameraPreview

在开发一个非常基本的相机应用程序时,我遇到了一系列非常具体的错误。代码与android网站上的代码几乎相同

Galaxy SII是唯一一款在LogCat控制台中显示以下错误的手机:

06-28 16:28:40.098: E/Surface(1650): Surface::init token -2 identity 18
“identity”后面的数字会更改(42、38等),但错误仍然存在

我认为这可能与以下类别有关,但仍不确定其含义:

public class CameraPreview extends SurfaceView implements SurfaceHolder.Callback 
Galaxy SII可能导致此错误的原因是什么?我还在HTC Vivid和Pantech Burst上进行测试。我担心这可能会导致更大的问题。我只是想弄明白这个错误是怎么回事

资料来源如下:

package com.basicam.android;

import android.app.Activity;
import android.content.Context;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.hardware.Camera;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import android.widget.Toast;

public class CamActivity extends Activity {

    private SurfaceView preview=null;
    private SurfaceHolder previewHolder=null;
    private Camera camera=null;
    private boolean inPreview=false;
    private boolean cameraConfigured=false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d("crap","oncreated");
        super.onCreate(savedInstanceState);

        setContentView(R.layout.main);

        preview=(SurfaceView)findViewById(R.id.preview);
        previewHolder=preview.getHolder();
        previewHolder.addCallback(surfaceCallback);
        previewHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }

    @Override
    public void onResume() {
        super.onResume();

        camera=Camera.open();
        startPreview();
    }

    @Override
    public void onPause() {
        if (inPreview) {
            camera.stopPreview();
        }

        camera.release();
        camera=null;
        inPreview=false;

        super.onPause();
    }

    private Camera.Size getBestPreviewSize(int width, int height,
            Camera cam) {
        Camera.Size result=null;
        Log.d("crap", "can haz preview sizes?");
        int i = 0;
        for (Camera.Size size : cam.getParameters().getSupportedPictureSizes()) {

            Log.d("sizew", ""+size.width);
            if (size.width<=width && size.height<=height) {
                Log.d("sizew", ""+size.width);
                Log.d("sizeh", ""+size.height);
                if (result==null) {
                    result=size;
                }
                else {
                    int resultArea=result.width*result.height;
                    int newArea=size.width*size.height;

                    if (newArea>resultArea) {
                        result=size;
                    }
                }
            }
        }

        return(result);
    }

    private void initPreview(int width, int height) {
        if (camera!=null && previewHolder.getSurface()!=null) {
            try {
                camera.setPreviewDisplay(previewHolder);
            }
            catch (Throwable t) {
                Log.e("PreviewDemo-surfaceCallback",
                        "Exception in setPreviewDisplay()", t);
            }

            if (!cameraConfigured) {
                Camera.Parameters parameters=camera.getParameters();
                Camera.Size size=getBestPreviewSize(width, height,
                        camera);

                if (size!=null) {
                    parameters.setPreviewSize(size.width, size.height);
                    camera.setParameters(parameters);
                    cameraConfigured=true;
                }
            }
        }
    }

    private void startPreview() {
        if (cameraConfigured && camera!=null) {
            camera.startPreview();
            inPreview=true;
        }
    }

    SurfaceHolder.Callback surfaceCallback=new SurfaceHolder.Callback() {
        public void surfaceCreated(SurfaceHolder holder) {
            // no-op -- wait until surfaceChanged()
        }

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

            initPreview(width, height);
            startPreview();
        }

        public void surfaceDestroyed(SurfaceHolder holder) {
            // no-op
        }
    };

}
package com.basicam.android;
导入android.app.Activity;
导入android.content.Context;
导入android.content.pm.ActivityInfo;
导入android.content.pm.PackageManager;
导入android.hardware.Camera;
导入android.os.Build;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.SurfaceHolder;
导入android.view.SurfaceView;
导入android.widget.Toast;
公共类活动扩展了活动{
private SurfaceView preview=null;
private SurfaceHolder previewHolder=null;
私人摄像机=空;
private boolean inPreview=false;
私有布尔值cameraConfigured=false;
@凌驾
创建时的公共void(Bundle savedInstanceState){
Log.d(“垃圾”、“未创建”);
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
预览=(SurfaceView)findViewById(R.id.preview);
previewHolder=preview.getHolder();
previewHolder.addCallback(surfaceCallback);
previewHolder.setType(SurfaceHolder.SURFACE类型推送缓冲区);
}
@凌驾
恢复时公开作废(){
super.onResume();
camera=camera.open();
startPreview();
}
@凌驾
公共无效暂停(){
如果(审查){
camera.stopPreview();
}
相机。释放();
摄像机=零;
inPreview=false;
super.onPause();
}
私人相机。大小getBestPreviewSize(整数宽度,整数高度,
摄像机(摄像头){
Camera.Size结果=null;
Log.d(“垃圾”,“haz能预览尺寸吗?”);
int i=0;
对于(Camera.Size大小:cam.getParameters().getSupportedPictureSizes()){
Log.d(“sizew”,“size.width”);

如果(size.width)您能显示源代码吗?我们无法判断这里发生了什么,而且我们也看不到您端的屏幕:)很好的日志评论-保留在那里-经典:)+1从我这里,让我微笑:)很好!有趣的是,它对HTC Vivid和Pantech Burst有效吗?它可能有助于重新编辑您的问题,以包括android版本,并指出它是否扎根?这个问题可能对您有所帮助?这里还有FWIW,我没有看到日志消息在AOSP中看起来是这样的。可能是OEM的一些调整?