Ошибка камеры Android с приложением вкладок и файловым браузером или галереей - PullRequest
0 голосов
/ 06 января 2012

У меня странная ошибка.У меня есть приложение с 5 вкладками.В одной из этих вкладок я использую камеру.У меня есть кнопка Пуск и Стоп, чтобы запустить и остановить предварительный просмотр камеры.Если я запускаю камеру, то я останавливаю ее, затем перехожу на другую вкладку и, наконец, возвращаюсь на вкладку камеры, камера работает нормально, если я нажимаю кнопку запуска.

Но если я вызову галерею или браузер файлов из другой вкладки, когда я вернусь к вкладке камеры, камера больше не будет работать, без предварительного просмотра, идея?

Это исходный код вкладки камеры:

public class CamActivity extends Activity implements SurfaceHolder.Callback
{
    Button  startButton;
    boolean stop;
    Camera.Size cameraSize;
    Camera camera;
    SurfaceView surfaceView;
    SurfaceHolder surfaceHolder;
    boolean previewing = false;


    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        super.setContentView(R.layout.cam);

        startButton = (Button) findViewById(R.id.startButton);

        surfaceView = (SurfaceView)findViewById(R.id.surfaceView);
        surfaceHolder = surfaceView.getHolder();
        surfaceHolder.addCallback(this);
        surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);

        camera = Camera.open(0);
        camera.setDisplayOrientation(90);
        camera.getParameters().setPreviewFpsRange(1000, 2000);


        startButton.setOnClickListener(new Button.OnClickListener(){
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                if(!previewing){
                    try {
                        camera.setPreviewDisplay(surfaceHolder);
                        camera.startPreview();
                        previewing = true;
                        startButton.setText("Stop camera");
                    } catch (IOException e) {}
                }
                else
                {
                    startButton.setText("Start camera");
                    previewing = false;
                    camera.stopPreview();
                }
            }
        });

        camera.setPreviewCallback(new PreviewCallback() {
            public void onPreviewFrame(byte[] _data, Camera _camera) {
                if(previewing)
                    sendFrame(_data);
            }
        });
    } 

    public void sendFrame(byte[] _data)
    {       
        // ...
    }

    protected void onPause() {
        super.onPause();
        if(previewing)
        {
            camera.stopPreview();
            previewing = false;
            startButton.setText("Start camera");        

        }
        // camera.release();
    }

    /*
    protected void onResume() {
        super.onResume();
        camera = Camera.open(0);
        camera.setDisplayOrientation(90); // Pour le Galaxy S2
        camera.getParameters().setPreviewFpsRange(1000, 2000);   //Android 2.3.3
        //camera.getParameters().setPreviewFrameRate(10); Android 2.2
    }
    */


    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width,
    int height) {
    // TODO Auto-generated method stub

    }

    @Override
    public void surfaceCreated(SurfaceHolder holder) {
    // TODO Auto-generated method stub

    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
    // TODO Auto-generated method stub

    }
}

Другое дело, что если я поставлю onResume и отпущу камеру, когда вкладка находится в состоянии OnPause, произойдет сбой приложения.

Пожалуйста, если у вас есть идеи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...