0

私のアプリケーションでは、基本的にフラッシュLEDのオンとオフを切り替える画像ボタンがあります。コードは初めて正常に実行されます。つまり、最初にクリックするとLEDがオンになり、2回目にクリックするとオフになります。しかし、3番目のクリック以降は何も起こりません。NexusSでこれをテストしています。

以下は、ImageButtonClickメソッドのコードです。

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;
            }
        }
    });
}

私の考えでは、stopPreviewを呼び出している間は破棄されていないと思うので、SurfaceViewで何かを行う必要がありますが、よくわかりません。

以下は、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();
    }
}

どんな助けでもいただければ幸いです。ありがとう。

4

1 に答える 1

1

stop preview release camera を呼び出してカメラ インスタンスを null にする代わりに。カメラを再起動するには、カメラを再度初期化します。カメラを初期化する方法と、カメラを解放する方法の 2 つの異なる方法を作成します。これで問題は解決します。

于 2012-07-25T13:38:46.270 に答える