Проблема с камерой Android - PullRequest
       5

Проблема с камерой Android

1 голос
/ 03 декабря 2010

У меня есть код, с которым я экспериментировал, чтобы посмотреть, что я могу сделать с устройством камеры. Этот следующий код работает, но у меня есть некоторые проблемы, которые я не могу решить.

  1. Первый звонок никогда не работает. При первом запуске кода обратный вызов onPictureTaken никогда не вызывается, поэтому файл никогда не записывается. Тем не менее, камера проходит все остальные шаги, включая создание ложного шума затвора.

  2. Кажется, я не могу установить размер изображения, отличный от того, к которому он применяется по умолчанию. Если я пытаюсь установить его на что-то другое, код перестает работать. Делает то же, что и выше, где камера выполняет все движения, но обратный вызов onPictureTaken никогда не вызывается.

  3. Когда снимки сохраняются в папке DCIM, снятые снимки не отображаются в приложении «Фотографии» по умолчанию на моем телефоне, если я не перезагружаю телефон.

  4. Есть ли способ через код отключить шум затвора?

Извините, код немного грязный, потому что это эксперимент.

Также этот код выполняется в BroadcastReceiver

    @Override
public void onReceive(Context context, Intent intent) {
    // TODO Auto-generated method stub


    if(intent.getAction().equals(TAKE_PICTURE_INTENT))
    {


        Toast.makeText(context, "Test", Toast.LENGTH_LONG).show();


                System.out.println("GOT THE INTENT");

                    try
                    {
                        Camera camera = Camera.open();

                        System.out.println("CAMERA OPENED");

                        Parameters params = camera.getParameters();
                        params.set("flash-mode", "off");
                        params.set("focus-mode", "infinity");
                        params.set("jpeg-quality", "100");
                        //params.setPictureSize(2592, 1952);

                        String str = params.get("picture-size" + "-values");
                        System.out.println(str);

                        String size = str.split(",")[0];
                        System.out.println(size);

                        //params.set("picture-size", size);

                        camera.setParameters(params);


                        System.out.println("CAMERA PARAMETERS SET");



                        camera.startPreview();
                        System.out.println("CAMERA PREVIEW STARTED");


                        camera.autoFocus(new AutoFocusCallBackImpl());


                    }
                    catch(Exception ex)
                    {
                        System.out.println("CAMERA FAIL, SKIP");
                        return ;
                    }


    }//if   

}//onreceive


private void TakePicture(Camera camera)
{
    camera.takePicture(new Camera.ShutterCallback() {

        @Override
        public void onShutter() {
            // TODO Auto-generated method stub

            System.out.println("CAMERA SHUTTER CALLBACK");
        }
    }
     , null, 
        new Camera.PictureCallback() {

                public void onPictureTaken(byte[] imageData, Camera c) {
                    //c.release();

                    System.out.println("CAMERA CALLBACK");

                    FileOutputStream outStream = null;
                    try {

                        System.out.println("Start Callback");
                        File esd = Environment.getExternalStorageDirectory();

                        outStream = new FileOutputStream(esd.getAbsolutePath() + String.format(
                                "/DCIM/%d.jpg", System.currentTimeMillis()));

                        outStream.write(imageData);
                        outStream.close();
                        System.out.println( "onPictureTaken - wrote bytes: " + imageData.length);
                    } catch (FileNotFoundException e) {
                        e.printStackTrace();

                          System.out.println("File not found exception");
                    } catch (IOException e) {
                        e.printStackTrace();

                          System.out.println("IO exception");
                    } finally {
                          System.out.println("Finally");
                          c.release();
                    }

                }
            }
         );
    //camera.release();
}//TAKE PICTURE

private class AutoFocusCallBackImpl implements Camera.AutoFocusCallback {
    @Override
    public void onAutoFocus(boolean success, Camera camera) {
        //bIsAutoFocused = success; //update the flag used in onKeyDown()
        System.out.println("Inside autofocus callback. autofocused="+success);
        //play the autofocus sound
        //MediaPlayer.create(CameraActivity.this, R.raw.auto_focus).start();

        if(success)
        {
            System.out.println("AUTO FOCUS SUCCEDED");
        }
        else
        {
            System.out.println("AUTO FOCUS FAILED");
        }

        TakePicture(camera);
        System.out.println("CALLED TAKE PICTURE");

    }
 }//AUTOFOCUSCALLBACK

1 Ответ

1 голос
/ 03 декабря 2010

1. Прежде всего выведите всю логику камеры из приемника BroadCast и поместите ее в отдельное действие.

2

Когда изображения сохраняются в папке DCIM, снятые изображения не отображаются в приложении «Фотографии» по умолчанию на моем телефоне, пока я не перезагружаю телефон.

потому что MediaScanner необходимо вызывать для повторного сканирования изображений / изменений после съемки фотографии. Когда вы перезагрузите телефон, mediascanner сканирует медиа и находит новые изображения. для этой цели вы должны проверить MediaScanner.

3.Следуйте за камерой Android Учебник & API камеры

-Спасибо

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