Autore Topic: attendere un certo tempo per invocare più votle takepicture  (Letto 495 volte)

Offline titanum

  • Nuovo arrivato
  • *
  • Post: 47
  • Respect: 0
    • Mostra profilo
attendere un certo tempo per invocare più votle takepicture
« il: 02 Agosto 2012, 10:53:12 CEST »
0
Ciao ragazzi, ho realizzato un'applicazione che fa partire la fotocamera e quando riconosce un volto scatta una foto. Ho usato un listener che estende FaceDetectionListener e uso la funzione takepicture per catturare l'immagine. Questo è il codice:

Codice: [Seleziona]
public class MyFaceDetectionListener implements FaceDetectionListener {

        private Context context;
        public MyFaceDetectionListener (Context context){
                super();
                this.context = context;
        }
       
        private PictureCallback jpegCallback = new PictureCallback() {

                public void onPictureTaken(byte[] data, Camera camera) {
                                Log.i("CAMERA", "Foto salvata: ");
                                /*Bitmap bitmapPicture = BitmapFactory.decodeByteArray(arg0, 0, arg0.length); */

                                  Uri uriTarget = context.getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, new ContentValues());
                                  OutputStream imageFileOS;
                                  try {
                                           imageFileOS = context.getContentResolver().openOutputStream(uriTarget);
                                           imageFileOS.write(data);
                                           imageFileOS.flush();
                                           imageFileOS.close();
                                           Toast.makeText(context,"Image saved: " + uriTarget.toString(),Toast.LENGTH_LONG).show();
                                  } catch (FileNotFoundException e) {
                                          throw new RuntimeException(e);
                                  } catch (IOException e) {
                                          throw new RuntimeException(e);
                                  }       
                                  camera.startPreview();
                        }
                };

        @Override
        public void onFaceDetection(Face[] faces, Camera camera) {
                for (int i = 0; i < faces.length; i++) {
                        Log.i("CAMERA", "Faccia riconosciuta: " + faces[i].score);
                }

                camera.takePicture(null, null, jpegCallback);
        }
}

Il problema è che viene chiamato molte volte in pochissimo tempo, scatta la prima foto e poi l'applicazione va in crash, nel logcat compare una runtimeexception takepicture failed.
Nella documentazione ufficiale ho letto che non bisogna chiamare takepicture fino a quando l'oggetto di tipo pictureCalback passato come parametro non ha terminato il suo lavoro, l'unico modo che mi viene in mente sono i thread ma mi sembra eccessivo, quindi mi chiedevo c'è un altro modo per realizzare questa cosa? Grazie