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で1つ宣言します

次に、次のようなことを行います。

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 に答える