Asignatura: Application Development for Mobile Devices.
Tema: Uso de la Cámara con Android.
Ejercicio.
Diseñar una aplicación que permita el uso de la cámara en un dispositivo móvil con Android.
DESARROLLO.
1. Crear un nuevo proyecto en Android Studio.
2. Modificar el código del archivo [Link], como se indica enseguida:
import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link];
import [Link];
import [Link].*;
import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link];
import [Link];
import [Link];
import [Link].*;
import [Link];
public class MainActivity extends AppCompatActivity {
ImageView ivFoto;
Button btnTomarFoto;
final int COD_FOTO = 20;
final String CARPETA_RAIZ = "MisFotosApp";
final String CARPETA_IMAGENES = "imagenes";
final String RUTA_IMAGEN = CARPETA_RAIZ + CARPETA_IMAGENES;
String path;
@Override
protected void onCreate(Bundle savedInstanceState) {
[Link](savedInstanceState);
setContentView([Link].activity_main);
ivFoto = findViewById([Link]);
btnTomarFoto = findViewById([Link]);
if([Link](this, [Link])
!= PackageManager.PERMISSION_GRANTED) {
[Link](this, new
String[]{[Link],
[Link].WRITE_EXTERNAL_STORAGE}, 0);
}
[Link](new [Link]() {
@Override
public void onClick(View v) {
TomarFoto();
}
});
}
public void TomarFoto() {
String nombreImagen = "";
File fileImagen = new File([Link](), RUTA_IMAGEN);
boolean isCreada = [Link]();
1
Alejandro S. Cifuentes Alvarez.
if(isCreada == false) {
isCreada = [Link]();
}
if(isCreada == true) {
nombreImagen = ([Link]() / 1000) + ".jpg";
}
path =
[Link]()+[Link]+RUTA_IMAGEN+[Link]+nombr
eImagen;
File imagen = new File(path);
Intent intent = null;
intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if([Link].SDK_INT >= Build.VERSION_CODES.N) {
String authorities = [Link]()+".provider";
Uri imageUri = [Link](this, authorities, imagen);
[Link](MediaStore.EXTRA_OUTPUT, imageUri);
} else {
[Link](MediaStore.EXTRA_OUTPUT, [Link](imagen));
}
startActivityForResult(intent, COD_FOTO);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
{
[Link](requestCode, resultCode, data);
if(resultCode == RESULT_OK) {
switch (requestCode) {
case COD_FOTO:
[Link](this, new String[]{path}, null, new
[Link]() {
@Override
public void onScanCompleted(String path, Uri uri) {
}
});
Bitmap bitmap = [Link](path);
[Link](bitmap);
break;
}
}
}
}
3. Modificar el archivo activity_main.xml, como se indica enseguida:
<?xml version="1.0" encoding="utf-8"?>
<[Link]
xmlns:android="[Link]
xmlns:app="[Link]
xmlns:tools="[Link]
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/btnTomarFoto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
2
Alejandro S. Cifuentes Alvarez.
android:layout_marginLeft="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
android:text="Tomar foto"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<ImageView
android:id="@+id/ivFoto"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="8dp"
android:layout_marginEnd="8dp"
android:layout_marginRight="8dp"
android:layout_marginBottom="8dp"
app:layout_constraintBottom_toTopOf="@+id/btnTomarFoto"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</[Link]>
4. En el archivo [Link], agregar los siguientes permisos para el uso de la cámara. Observar la etiqueta del
comentario solamente si es necesario: <!-- SI ES NECESARIO: PARA USAR LA CAMARA EN ANDROID 7 O SUPERIOR --> para incluir
el código indicado:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="[Link]
package="[Link]">
<uses-permission android:name="[Link]" />
<uses-feature android:name="[Link].camera2"
android:required="true" />
<uses-permission android:name="[Link].WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="[Link].READ_EXTERNAL_STORAGE" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="[Link]" />
<category android:name="[Link]" />
</intent-filter>
</activity>
<!-- SI ES NECESARIO: PARA USAR LA CAMARA EN ANDROID 7 O SUPERIOR -->
<provider
android:authorities="${applicationId}.provider"
android:name="[Link]"
android:exported="false"
android:grantUriPermissions="true">
<meta-data
3
Alejandro S. Cifuentes Alvarez.
android:name="[Link].FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths"
/>
</provider>
</application>
</manifest>
5. Crear la carpeta /res/xml. En ésta ruta crear el archivo provider_paths.xml. En este archivo xml, agregar el código
siguiente:
<?xml version="1.0" encoding="utf-8"?>
<paths>
<external-path name="external_storage_root" path="." />
</paths>
6. Ejecutar la aplicación en Android Studio y observar las siguientes figuras, de la 1 a la 5, cuando se seleccionan los
botones correspondientes.
Figura 1. Digitar TOMAR FOTO. Figura 2. Digitar GOT IT. Figura 3. Tomar foto.
4
Alejandro S. Cifuentes Alvarez.
Figura 4. Foto almacenada. Figura 5. El botón izquierdo es para tomar otra foto.
Los botones de la derecha para regresar.
7. Ejecutar la aplicación en un dispositivo real y reportar las documentar las pantallas obtenidas.
5
Alejandro S. Cifuentes Alvarez.