Cuando queremos interactuar con nuestro
dispositivo Android desde una aplicación programada por nosotros, le deberemos
indicar dos cosas:
- Como queremos que se comporte nuestra aplicación (puede ser usando una funcionalidad del sistema que integremos en nuestra app, como ya vimos anteriormente al programar el navegador web), o la segunda opción, es decir que desde nuestra aplicación se ejecute algún proceso del sistema operativo independiente de nuestra app, como podría ser abrir la cámara de fotos, la aplicación de Gmail…
- Los permisos que debemos atribuirle al Manifest para poder hacer uso de ese recurso del sistema.
En esta sección nos centraremos en la
opción de lanzar recursos del sistema operativo desde nuestra app, a través de
intents implícitos.
Para explicarlo en mejor detalle, vamos a
realizar paso a paso el siguiente ejercicio:
Ejercicio:
Realiza un proyecto de una aplicación semejante a la de la siguiente imagen
Es decir, según el botón que pulsemos
haremos lo siguiente:
- Abrir el navegador cargando la web de IES Sierra de Guara (o programandoapasitos.blogspot.com, que de paso hacemos visitas).
- Abrir la aplicación de teléfono para llamar a otro número
- Abrir la aplicación de teléfono con un número ya precargado, en este caso el teléfono del IES Sierra de Guara
- Cargar la dirección del IES Sierra de Guara en Google Maps
- Abrir la cámara de fotos
- Abrir la aplicación de Correo Electrónico (o Gmail, etc.) con un destinatario, título y cuerpo ya configurado.
- Abrir la agenda de contactos
- Abrir Google Maps cargando la búsqueda de la ciudad de Huesca.
Lo primero será crear un nuevo
proyecto en el Android Studio, y generar el Layout con los botones de la
siguiente forma:
A continuación copio y pego el XML del
Layout por si se quiere hacer directamente:
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context=".ItemsImplicitos">
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Mostrar web del
instituto"
android:id="@+id/btnWebInstituto"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:onClick="verInstituto" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Llamar por telefono
a otro emulador"
android:id="@+id/btnLlamarTelefono"
android:layout_below="@+id/btnWebInstituto"
android:layout_centerHorizontal="true"
android:onClick="llamarTelefono" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Marcar teléfono del
instituto"
android:id="@+id/btnMarcarTelefono"
android:layout_below="@+id/btnLlamarTelefono"
android:layout_centerHorizontal="true"
android:onClick="llamarInstituto" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Google Maps del
instituto"
android:id="@+id/btnMaps"
android:layout_below="@+id/btnMarcarTelefono"
android:layout_centerHorizontal="true"
android:onClick="mapaInstituto" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hacer foto"
android:id="@+id/btnFoto"
android:layout_below="@+id/btnMaps"
android:layout_centerHorizontal="true"
android:onClick="hacerFoto"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Enviar email al
instituto"
android:id="@+id/btnMail"
android:layout_below="@+id/btnFoto"
android:layout_centerHorizontal="true"
android:onClick="enviarMail"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Mostrar
contactos"
android:id="@+id/btnContactos"
android:layout_below="@+id/btnMail"
android:layout_centerHorizontal="true"
android:onClick="verContactos" />
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btnMapsBuscar"
android:layout_below="@+id/btnContactos"
android:layout_centerHorizontal="true"
android:text="Buscar Huesca en
Google Maps"
android:onClick="buscarHuesca" />
</RelativeLayout>
Hecho esto, nos vamos a ir a la clase Java
desde la que programaremos todo, en mi caso ItemsImplicitos.java.
Lo primero que haremos es crear las
variables para los botones y capturarlos del Layout en el método onCreate(), como siempre:
Button btnWebInstituto;
Button btnLlamarTelefono;
Button btnMarcarTelefono;
Button btnMaps;
Button btnFoto;
Button btnMail;
Button btnContactos;
Button btnMapsBuscar;
Intent intent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_items_implicitos);
btnWebInstituto = (Button)findViewById(R.id.btnWebInstituto);
btnLlamarTelefono = (Button)findViewById(R.id.btnLlamarTelefono);
btnMarcarTelefono = (Button)findViewById(R.id.btnMarcarTelefono);
btnMaps = (Button)findViewById(R.id.btnMaps);
btnFoto = (Button)findViewById(R.id.btnFoto);
btnMail = (Button)findViewById(R.id.btnMail);
btnContactos = (Button)findViewById(R.id.btnContactos);
btnMapsBuscar = (Button)findViewById(R.id.btnMapsBuscar);
}
Hecho esto, ahora procederemos a crear una
función para cada acción que realizarán los botones.
Los pasos a seguir son crear un intent que
convoque a un componente externo a nuestra clase que debe estar ya declardo.
Realmente eso ya sabemos hacerlo, en la sección que desarrollamos el navegador
web hicimos exactamente lo mismo, con la diferencia que aquí necesitamos
acceder a componentes no programados por nosotros.
Si vamos a la web http://developer.android.com/intl/es/guide/components/intents-common.html
veremos los tipos de intents más comunes para Android.
Vamos pues a ello. Cada intent necesario irá
remarcado en una subcategoría:
ACTION_VIEW
Este será el intent usado para programar la
apertura de navegadores web, google maps… aplicaciones que sirvan para
visualizar un objeto concreto que le pasemos.
El código que programaremos para btnWebInstituto es el siguiente:
public void verInstituto(View v){
intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://www.iessierradeguara.com/site/"));
startActivity(intent);
}
Lo que le estamos indicando es que será un
intent tipo ACTION_VIEW, y que la dirección completa que nos mostrará será la
que pasamos como segundo parámetro. El sistema Android entenderá esa dirección
y nos mostrará un menú con varias opciones para abrirlo (Google Chrome,
navegador por defecto…) dependiendo de nuestra versión de Android.
Para btnMaps
el código es:
public void mapaInstituto(View v){
intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("geo:42.1345931,-0.4053455"));
startActivity(intent);
}
Aquí en vez de pasar una dirección web le
vamos a enviar unas coordenadas geográficas, que el sistema detectará para
abrir con Google Maps o con nuestro navegador web.
En btnContactos,
la función es:
public void verContactos(View v){
intent = new Intent(Intent.ACTION_VIEW,
ContactsContract.Contacts.CONTENT_URI);
startActivity(intent);
}
Indicando que abriremos una función específica
de nuestro sistema operativo.
Para el botón btnMapsBuscar, generamos esto:
public void buscarHuesca(View v){
intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("geo:0.0?=Huesca"));
}
Si comparáis con el antiguo código de
coordenadas geográficas, hay una sutil diferencia. En el otro le indicamos una posición
numérica exacta, mientras que aquí estamos diciendo que obvie las coordenadas numéricas
y haga una búsqueda de algo llamado ‘Huesca’.
ACTION_CALL
Éste método lo usaremos cuando queramos
abrir el teléfono predefiniendo ya un número concreto al que marcar.
Lo usaremos para el botón btnMarcarTelefono, que nos pondrá en
contacto con el IES Sierra de Guara. La función se crea tal que así:
public void llamarInstituto(View v){
intent = new Intent(Intent.ACTION_CALL,
Uri.parse("tel:974243477"));
startActivity(intent);
}
Es decir, abrimos el teléfono e indicamos
el número, sin más.
ACTION_DIAL
Es el mismo procedimiento que ACTION_CALL, con la diferencia de que aquí
no vamos a pasar ningún número, indicaremos simplemente que se abra el
componente Teléfono.
public void llamarTelefono(View v){
intent = new Intent(Intent.ACTION_DIAL,
Uri.parse("tel:"));
}
Como veis, solo hay que pasar el parámetro “tel:”
y listo. Esto podremos usarlo para el botón btnLlamarTelefono.
ACTION PARA CÁMARA DE FOTOS
Para poder acceder a la cámara de fotos,
deberemos indicar la siguiente función que referiremos a btnFoto:
public void hacerFoto(View v){
intent = new Intent("android.media.action.IMAGE_CAPTURE");
startActivity(intent);
}
ACTION_SEND
Y por último, para configurar nuestro btnMail y poder enviar correos electrónicos,
deberemos crear la siguiente función:
public void enviarMail(View v){
intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT,
"Reciclaje
tecnologico");
intent.putExtra(Intent.EXTRA_TEXT,
"Información
sobre el proyecto de Educacion 2015");
intent.putExtra(Intent.EXTRA_EMAIL,
"iessguhuesca@educa.aragon.es");
startActivity(intent);
}
Aquí hay que definir distintos parámetros,
a saber:
- setType(). El tipo de mensaje que será, pudiendo adjuntar texto plano, enriquecido, etc.
- putExtra(Intent.EXTRA_SUBJECT). Adjuntaremos el asunto del mensaje
- putExtra(Intent.EXTRA_TEXT). Será el cuerpo de nuestro mensaje
- putExtra(Intent.EXTRA_MAIL). Las direcciones a las que lo enviaremos. Si quisiéramos hacerlo para varios correos una solución sería pasar un array de strings en vez de un único campo.
Una vez hecho, faltará añadir los permisos
en el manifest de Android para asegurarnos de poder acceder a todos los
componentes del sistema.
Y con esto ya tendríamos las funciones
necesarias para generar nuestro ejercicio. Al ejecutarlo, podremos ver algo tal
que así:
0 comments:
Publicar un comentario