2012-08-09 5 views
5

Sto costruendo un'app per Android in cui desidero attendere il PictureCallback prima che l'attività di chiamata continui.Attività "Pausa" in attesa di PictureCallback in corso

import android.hardware.Camera; 

private Camera camera 
private Bitmap picture; 

camera.takePicture(null, null, new PictureCallback() { 
    @Override 
    public void onPictureTaken(byte[] data, Camera camera) { 
    BitmapFactory.Options options = new BitmapFactory.Options(); 
    options.inSampleSize = 1; 
    picture = BitmapFactory.decodeByteArray(data , 0, data.length, options); 
    } 
} 

... do some other logic with picture 

desidero mantenere l'altra logica separato e quindi desidero evitare codifica di questa nella funzione takePicture.

È possibile eseguire questo?

+0

Sto provando a fare esattamente lo stesso. Buona domanda. –

risposta

0

È una cattiva pratica bloccare il thread dell'interfaccia utente mentre si esegue qualsiasi lavoro in background.

Se si chiama l'attività Fotocamera incorporata, l'attività sarà in background. Dopo aver scattato l'immagine e aver chiuso l'attività della fotocamera, quando si ritorna alla propria attività, l'immagine verrà già salvata.

Se si utilizza la propria implementazione Camera, è necessario visualizzare uno ProgressDialog e, se si dispone di qualsiasi lavoro in background, è necessario farlo in un thread separato.

+0

Sto davvero utilizzando la mia implementazione della fotocamera. Non vedo come utilizzare ProgressDialog possa risolvere questo problema. Il modo in cui viene eseguito il codice è il seguente: 1) prendere foto 2) fare la logica successiva 3) callback restituisce immagine Mi piacerebbe che in seguente ordine: 1 3 2 – Gillain

+1

ho frainteso la tua domanda così sembra. Ma allora puoi semplicemente scrivere il tuo 2) in un metodo separato e chiamarlo alla fine della funzione di callback. –

+0

Grazie per la tua rapida risposta. Il tuo suggerimento potrebbe essere una soluzione, ma il motivo per cui sto avendo così tanti problemi è perché sto cercando di mantenere il mio codice più astratto possibile. Nel mio progetto ho un'attività e una classe Camera separata. Sto chiamando la funzione takePicture nella classe Camera, che dovrebbe quindi attendere la richiamata, seguita dal ritorno dell'immagine all'attività. Il problema è che il codice nell'attività DOPO la chiamata a takePicture viene eseguito PRIMA che il callback abbia la possibilità di restituire la bitmap. Dimmi se preferisci vedere il codice completo. – Gillain

0

È possibile implementarlo in due thread. Quindi subito dopo PictureCallback è chiamato call wait() sul thread corrente. Quindi, al termine di PictureCallback, chiamare notify() per consentire al thread in attesa di terminare correttamente. Ma tu non vuoi bloccare il tuo thread principale. Puoi se vuoi/ne hai bisogno, ma non è una buona idea.

+0

Ho provato a implementare PictureCallback in un thread diverso ma non ha funzionato. In qualche modo i callbacks sono sempre eseguiti nel thread principale. – Gillain