火炬应用Android 4.0.4 Nexus S i9020出错

时间:2012-04-07 12:22:32

标签: android nexus-s flashlight

手机应用程序Android 4.0.4 Nexus S i9020出现问题。 我已经尝试过在stackoverflow上发布的几十条建议,但没有任何对我有用。 该应用程序适用于Android 2.3.6版,但自4.0.4以来,火炬已停止工作。

这是我的impl和logcat输出。

@Override
protected void onResume()
{
    super.onResume();
    _Camera = Camera.open();
}

@Override
protected void onPause()
{
    if (_Camera != null)
    {
         _Camera.release();
    }
}

//called within runnable and post to a handler
private void processOffClick()
{

    if (_Camera != null)
    {
        Parameters params = _Camera.getParameters();
        params.setFlashMode(Parameters.FLASH_MODE_OFF);
        _Camera.setParameters(params);
        _Camera.stopPreview();
    }
}

//called within runnable and post to a handler
private void processOnClick()
{
    if (_Camera != null)
    {
        Parameters params = _Camera.getParameters();
        params.setFlashMode(Parameters.FLASH_MODE_TORCH);
        _Camera.setParameters(params);
        _Camera.startPreview();
    }
}

我还试图在没有runnables的情况下执行onclick offclick方法。

在Logcat中,执行onclick后会出现句法错误。

 04-07 14:10:02.719: E/CameraHardwareSec(82): preview window is NULL!
 04-07 14:10:02.719: I/CameraHardwareSec(82): virtual android::status_t android::CameraHardwareSec::startPreview() : deferring

市场上有一些可以与手机配合使用的相机应用程序。所以必须有一些方法来启动手电筒。

我还尝试添加一个SurfaceView / Holder,但它没有用。也许我做错了什么。

干杯卡里姆

1 个答案:

答案 0 :(得分:0)

你正在做的一切都很好,在版本4.0+中你需要一个表面视图。在layout.xml中声明一个

然后做这样的事情:

实施SurfaceHolder.Callback

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //init your layout
        this._surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView);
        this._surfaceHolder = this._surfaceView.getHolder();
        this._surfaceHolder.addCallback(this);
        this._surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

}

@Override
protected void onResume()
{
    super.onResume();
    _Camera = Camera.open();
    this._camera.startPreview();
    this._camera.setPreviewDisplay(this._surfaceHolder);
}


@Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
            int height) {
        // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        //this._surfaceHolder = holder;
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        //this._surfaceHolder = null;
    }