
In questa lezione vedremo come gestire la fotocamera con Android, e realizzeremo la nostra app “camera”.
Abbiamo già preso familiarità con la classe Camera e con i permessi necessari per accedere all’hardware corrispondente nella lezione 7 .
Stavolta non ci limiteremo ad accendere/spegnere il flash,ma visualizzeremo la preview proveniente dalla fotocamera.
Per prima cosa creiamo un nuovo progetto e lo chiamiamo “camera”. Andiamo su activity_main.xml ma non usiamo l’editor grafico, bensì quello testuale, scrivendo questo codice XML:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent"> <SurfaceView android:id="@+id/camera_surface" android:layout_width="fill_parent" android:layout_height="fill_parent"> </SurfaceView> </RelativeLayout>
Abbiamo creato così una SurfaceView, cioè una particolare View adatta a visualizzare la preview della fotocamera. Apriamo ora il file MainActivity.java e scriviamo:
public class MainActivity extends Activity implements SurfaceHolder.Callback{ private Camera camera; static private SurfaceView surfaceView; private SurfaceHolder surfaceHolder; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFormat(PixelFormat.TRANSLUCENT); requestWindowFeature(Window.FEATURE_NO_TITLE); //per eliminare la barra del titolo getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); //per rendere l'activity fullscreen setContentView(R.layout.activity_main); surfaceView = (SurfaceView)findViewById(R.id.camera_surface); surfaceHolder = surfaceView.getHolder(); //associamo l'holder surfaceHolder.addCallback(this); } public void surfaceCreated(SurfaceHolder holder) { camera=Camera.open(); } public void surfaceDestroyed(SurfaceHolder holder) { camera.release(); } public void surfaceChanged(SurfaceHolder arg0, int arg1, int arg2, int arg3) { try{ camera.setPreviewDisplay(arg0); camera.startPreview();} catch (IOException e){} } }
Non vi spaventate e analizziamo il codice insieme: per gestire la fotocamera abbiamo bisogno di 3 classi, Camera,SurfaceView e SurfaceHolder.
Camera ci permette di acquisire/rilasciare la fotocamera, che potrebbe essere in uso da un’altra applicazione.
SurfaceView ci permette di visualizzare la preview della fotocamera
SurfaceHolder ci permette di gestire 3 eventi, SurfaceCreated,SurfaceDestroyed e surfaceChanged, cioè ci permette di decidere le azioni da intraprendere rispettivamente alla creazione, alla distruzione e al cambiamento della SurfaceView.
Alla creazione prendiamo il controllo della camera, alla distruzione (cioè quando chiudiamo l’app) la rilasciamo in modo tale che un’altra applicazione possa utilizzarla.
Il terzo, più complicato, ci permette di far partire la preview della fotocamera.
Non scordiamoci infine di aggiungere all’AndroidManifest i permessi di accesso alla fotocamera come visto in precedenza.
Fin’ora visualizziamo solo la preview della fotocamera ma non possiamo scattare una foto. Nella prossima lezione vedremo come fare.
Puoi guardare tutte le lezioni passate consultando l’indice del corso di programmazione android