Ошибка с фонариком приложения Android 4.0.4 Nexus S i9020

У меня проблема с фонариком приложения Android 4.0.4 Nexus S i9020. Я перепробовал десятки предложений, размещенных здесь на stackru, но у меня ничего не получалось. Приложение работало с версией 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 методы без runnables.

В 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 ответ

Вы все делаете хорошо, в версии 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;
    }
Другие вопросы по тегам