【问题标题】:Android: camera's startPreview method not working after stopPreviewAndroid:相机的 startPreview 方法在 stopPreview 后不起作用
【发布时间】:2012-07-21 00:58:16
【问题描述】:

在我的应用程序中,我有一个图像按钮,基本上可以打开和关闭闪光灯 LED。代码第一次运行良好,即第一次单击它会打开 LED,第二次单击它会关闭它。但是然后没有任何反应,第三次点击。我正在 Nexus S 上对此进行测试。

以下是 ImageButton Click 方法的代码。

public void ToggleTorch(){
    final ImageButton tt = (ImageButton)findViewById(R.id.tt);
    tt.setOnClickListener(new OnClickListener(){
        @Override
        public void onClick(View v){
            if (isFlashOn){
                mycam.stopPreview();
                isFlashOn = false;
            } else {
                mycam.startPreview();
                isFlashOn = true;
            }
        }
    });
}

从我的想法来看,它必须对 SurfaceView 做一些事情,因为我认为它在调用 stopPreview 时没有被破坏,但我不确定..

以下是 onCreate 方法的代码。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //Check if Flash Light is Available
    Boolean has_flash = this.getPackageManager().hasSystemFeature(PackageManager.FEATURE_CAMERA_FLASH);
    if(has_flash){
        setContentView(R.layout.activity_main);
        SurfaceView preview = (SurfaceView)findViewById(R.id.pSv);
        SurfaceHolder holder = preview.getHolder();
        holder.addCallback(this);
        holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
        disableSleepMode();
        initFlashLight();
        ToggleTorch();
        screenTorchOn();
    } else {
        setContentView(R.layout.activity_main);
        disableSleepMode();
        screenTorchOn();
    }
}

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 反对票是什么?好玩吗?
  • 因为人们认为其他人应该了解 Android 设计不佳的 API。

标签: android camera surfaceview preview


【解决方案1】:

而不是调用停止预览释放相机并使相机实例为空。要重新启动相机,请再次初始化相机。制作两种不同的方法,一种用于初始化相机,另一种用于释放它。这将解决您的问题。

【讨论】:

  • 感谢您的回复,我在活动销毁时使用了 camera.release。但是,我通过在surfaceview代码中触发开始预览和停止预览解决了这个问题,它运行良好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多