0

我的手电筒应用程序 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();
    }
}

我还尝试在没有可运行文件的情况下执行 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,但它不起作用。也许我做错了什么。

干杯卡里姆

4

1 回答 1

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;
    }
于 2012-04-08T11:35:09.957 回答