Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 48 di 97
  • livello avanzato
Indice lezioni

Scattare una foto

Ecco come integrare nelle proprie app la capacità di scattare una foto, sfruttando direttamente gli strumenti forniti da Android.
Ecco come integrare nelle proprie app la capacità di scattare una foto, sfruttando direttamente gli strumenti forniti da Android.
Link copiato negli appunti

Potrebbe essere utile integrare nelle proprie app Android la capacità di scattare direttamente una foto ed utilizzarla “al volo”. Per farlo sfrutteremo le potenzialità già incluse nel sistema per la consueta logica di “non inventare di nuovo la ruota”.

Il dispositivo non mette solo a disposizione la macchina fotografica in quanto componente hardware ma anche il software e le API di gestione. Scopo di questo capitolo sarà imparare ad aprire dall'app direttamente il programma per scattare la foto ed ottenere come risultato l'immagine acquisita. Il vantaggio di integrare il programma ufficiale per le foto sta nell'avere a disposizione tutta la sua completezza: gestione di zoom, effetti, configurazioni.

Il primo concetto da affrontare è l'uso degli Intent per attivare il software fotografico. Non stiamo affrontando un argomento nuovo, dal momento che gli Intent li abbiamo già usati per invocare l'apertura di un'Activity secondaria in un'app. Avevamo, in quell'occasione, preannunciato l'importanza di questo meccanismo e la sua capacità di recapitare messaggi al di fuori dell'applicazione, a livello di sistema operativo. Adesso è giunto il momento di vederlo in pratica.

L'Intent che useremo richiede l'esecuzione di un'azione a livello globale, definita mediante una costante presente in un ContentProvider di sistema, il MediaStore:

Intent photoIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(photoIntent, PHOTO_REQUEST_CODE);

Il metodo utilizzato per avviare l'Intent è startActivityForResult. Si tratta di un meccanismo che permette di ricevere un risultato nella Activity chiamante. Il valore PHOTO_REQUEST_CODE è una costante intera definita nell'Activity stessa e serve solo a fornire un ID della richiesta.

Il risultato - quindi il completamento della fotografia - sarà fruibile all'interno del metodo onActivityResult e sarà reperibile mediante il campo data degli Extras:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode==PHOTO_REQUEST_CODE)
{
Bitmap bp = (Bitmap) data.getExtras().get("data");
photo.setImageBitmap(bp);
}
}

Il codice per la gestione dell'evento non fa altro che prelevare l'oggetto Bitmap corrispondente alla foto scattata e posizionarlo all'interno di una ImageView, qui rappresentata dalla variabile photo. Ciò permetterà di vedere la versione rimpicciolita della foto, innestata all'interno del layout.

Ti consigliamo anche