- Presentación.
- Vamos a realizar un programa para hacer fotos con la cámara y guardarlas en una carpeta.
- Este tutorial está basado en el tutorial oficial de Basic4Android.
____________________________
- Designer. Layout.
Creamos los controles
|
Nota: Para poner el emulador en horizontal, pulsamos las teclas
Ctrl F11
- Por ahora solo se pueden tomar fotos, no vídeos.
(Ver VideoRecord Application:
http://www.basic4ppc.com/android/help/audio.html#videorecordapp)
- Las fotos siempre deber ser tomadas en formato horizontal "Landscape"
(Ver tutorial oficial donde actúa sobre el archivo AndroidManifest.Xml )
- Cargamos la Librería:
Camera
Las librerías constan de un par de archivos de la forma:
Camera.jar
Camera.xml
que se encuentran en la subcarpeta Libraries donde está instalado el Basic4Android:
C:\Program Files (x86)\Anywhere Software\Basic4android\Libraries
|
Insertamos mediante
Designer / Add View
Panell1
Button1
Guardamos el Designer:
File / Save : Layout
- Si pusistes primero el Panel y luego el Button, el Button habrá tomado como ubicación "padre" al Panel, no al Activity.
- Para que el "padre" del Button sea el Activity, ponemos la propiedad Parent del Button1 en Activity.
(El Parent de un control es el lugar donde se ubica, normalmente es en el Activity o en un Panel) |
____________________________
- Código (copia y pega).
Código del programa en Basic4Android
|
'Activity module
Sub Process_Globals
' http://www.basic4ppc.com/forum/basic4android-getting-started-tutorials/6891-take-pictures-internal-camera.html
' Juan Antonio Villalpando
' juana1991@yahoo.com
End Sub
Sub Globals
Dim camara As Camera
Dim Panel1 As Panel
Dim Button1 As Button
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout") ' Cargamos el Designer
End Sub
Sub Activity_Resume
Button1.Enabled = False
camara.Initialize(Panel1, "camara")
End Sub
Sub Activity_Pause(UserClosed As Boolean)
camara.Release
End Sub
Sub camara_Ready(Success As Boolean)
If Success Then
camara.StartPreview
Button1.Enabled = True
Else
ToastMessageShow("No se puede activar la cámara", True)
End If
End Sub
Sub camara_PictureTaken(Data() As Byte)
camara.StartPreview
Dim salida As OutputStream
salida = File.OpenOutput(File.DirRootExternal,"foto.jpg",False)
salida.WriteBytes(Data,0,Data.Length)
salida.Close
ToastMessageShow("Imagen guardada en: " & File.Combine(File.DirRootExternal,"foto.jpg"), True)
Button1.Enabled = True
End Sub
Sub Button1_Click
Button1.Enabled = False
camara.TakePicture
End Sub
|
____________________________________
Enlaces importantes
- Otra librería para la cámara. Tutoriales.
- Versión 2.20
- Consulta también este tutorial sobre la cámara. (CameraEx class)
____________________________________
____________________________________
____________________________________
- Recordamos tres lugares de directorios.
DirAssets es el directorio del programa C:\Android\<Programa>\Files
es un directorio de solo lectura, por lo tanto no podemos (desde el programa), cambiar nada en él.
DirRootExternal es un directorio en la tarjeta de memoria SD de nuestro móvil. Si en la tarjeta de nuestro móvil tenemos un directorio que se llama Fotos, podemos ir a ese directorio de esta manera...
out = File.OpenOutput(File.DirRootExternal & "/" & "Fotos", "foto2.jpg", True)
- Podemos llegar a la SD Card, entrando en... /mnt/sdcard
Esto lo debemos hacer desde el shell de LINUX como comento en un tutorial posterior.
DirInternal es un directorio existente en nuestro Programa y que solo podemos acceder mediante ese Programa.
Para ver el listado de archivos en ese directorio, lo debemos hacer mediante el shell del LINUX, esto lo he comentado anteriormente y se explica con más detalle en el tutorial LINUX. Este directorio se encuentra en una subcarpeta de nuestro Programa, pero no podemos verlo mediante el Explorador de Windows.
out = File.OpenOutput(File.DirInternal & "/" , "logo2.png", True)
La manera de llegar a ese directorio es yendo a linux y pasando a la carpeta
cd /data/data/<anywheresoftware.b4a.samples.programa>/files
ls
DirDefaultExternal es el directorio por defecto de la aplicación en el móvil. Se puede acceder a él cualquier aplicación mediante la ruta:
[external device]/Android/data/[package name]/files/