Introducción a C - Campus Virtual ORT

Transcripción

Introducción a C - Campus Virtual ORT
Trabajo Práctico
Profesor: Pablo Ulman (Polshu)
Activities & Intents
Fecha 2014/09/10
Objetivos:
 Desarrollar una aplicación más de una Activity.
 Pasaje de parámetros entre Activities.
 Utilización de Intents invocando con servicios del sistema operativo.
 Utilización de los Toast propiedades de los controles.
 Suscripción a los eventos de los controles (Views).
Desarrollar una aplicación según el Layout que se encuentra debajo.
v 2.3
1 de 4
Trabajo Práctico
Profesor: Pablo Ulman (Polshu)
Activities & Intents
Fecha 2014/09/10
Pasaje de parámetros entre Activities
public class PrimerActivity extends Activity {
public final static String EXTRA_MESSAGE = "com.example.tp02.MESSAGE";
private void CrearSegundaActivity(){
// Creo el Bundle
Bundle datos = new Bundle();
// Asigno datos al Bundle
datos.putString("pNombre", "Pablo Olmos");
datos.putInt("pEdad", 40);
datos.putString(EXTRA_MESSAGE, "Forma Correcta");
// Creo el Intent
//Intent intent = new Intent(PrimerActivity.this(), SegundaActivity.class);
Intent intent = new Intent(getApplicationContext(),SegundaActivity.class);
// Asigno el Bundle al Intent
intent.putExtras(datos);
// Inicio la Actividad
startActivity(intent);
}
}
public class SegundaActivity extends Activity {
//
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_secondary);
// Obtengo la referencia al TextView
TextView tvOutput = (TextView) findViewById(R.id.tvOutput);
String strMostrar = "";
// Obtengo el Bundle
Bundle datos = this.getIntent().getExtras();
// Obtengo los datos del Bundle
strMostrar += datos.getString("pNombre") + "\n";
strMostrar += datos.getInt("pEdad")+ "\n";
strMostrar += datos.getString(PrimerActivity.EXTRA_MESSAGE)+ "\n";
// Muestro los datos en un TextView
tvOutput.setText(strMostrar);
}
}
Nota: Todas las Activities deben estar explícitamente definidas en el archivo de manifiesto, sino no se van a
poder visualizar.
<activity
android:name="com.example.tp04.SegundaActivity"
android:label="@string/title_activity_secondary" >
</activity>
v 2.3
2 de 4
Trabajo Práctico
Profesor: Pablo Ulman (Polshu)
Activities & Intents
Fecha 2014/09/10
Itents
Al desarrollar aplicaciones que se enfoquen cada vez más a un entorno real nos vemos en la necesidad de
utilizar más actividades además de la principal. Si bien la actividad principal es la primera que se le presenta
al usuario al momento de que la aplicación es lanzada, requerimos de un “algo” que nos permita saltar de esa
primera pantalla a las demás que conforman la aplicación.
Ese “algo” son los Intents, uno de los componentes básicos que conforman las aplicaciones Android.
Básicamente, un Intent nos permite indicarle a Android que queremos hacer algo a través de otra actividad
que se construyó específicamente para esa situación.
Conceptos básicos
Los objetos de tipo android.content.Intent se utilizan para enviar mensajes asíncronos dentro de una
aplicación o entre varias aplicaciones. Así, los Intents permiten enviar o recibir información desde y hacia
otras actividades o servicios. También, permiten lanzar mensajes de tipo Broadcast para identificar cuando
ciertos eventos han ocurrido.
Los Intents permiten la comunicación entre cualquier de los componentes de la aplicación instalados en el
dispositivo.
Un objeto Intent puede contener información para
el componente receptor y de esta manera realizar
determinada tarea. Por ejemplo, si nuestra
aplicación llama a un browser a través de un
Intent, este deberá contener una URL para que el
browser (el componente receptor) pueda
mostrarle esa página al usuario. Por otro lado, un
Intent también puede contener información para
el sistema Android para que este pueda
determinar bajo algunos escenarios qué elemento
puede atender la solicitud de la aplicación.
Intents explícitos e implícitos
Android soporta dos tipos de Intents: explícitos e implícitos.
Los explícitos son aquellos que nombran el componente que se necesita, ejemplo, la clase Java específica
que se necesita para realizar alguna tarea.
Los Intent implícitos son aquellos que le preguntan al sistema qué servicio o componente es el más
adecuado para realizar la petición, es decir, no específica un componente en especial.
En la construcción de un Intent implícito debemos especificar la acción que debe ser realizada y
opcionalmente una URI (Uniform Resource Identifier que identifica un recurso) que regularmente es usada por
esta acción.
Por ejemplo, podemos decirle al sistema que necesitamos ver (acción) una página web (URI). Cuando se
inicie el llamado al Intent para que se realice esta acción, el sistema tratará de encontrar una aplicación que
esté registrada para este evento, tal es el caso de los browsers. También es posible agregar más información
al Intent por medio de “extras” que son parámetros que se le pasarán al Intent. Estos últimos son pares de
key/valores.
v 2.3
3 de 4
Trabajo Práctico
Profesor: Pablo Ulman (Polshu)
Activities & Intents
Fecha 2014/09/10
Obteniendo la información del Intent desde una actividad
Para obetener la información del Intent en la actividad que se haya mandado a llamar utilizamos el método
getIntent().
Si la actividad fue llamada a través de un Intent implícito, podemos recibir la información y la URL desde el
Intent utilizando los métodos getAction(), getData() y getExtras().
Intent Filter
Como dijimos líneas arriba, el sistema Android determinará cuáles aplicaciones son las adecuadas para
responder a un Intent implícito y en caso de que haya más de una aplicación que pueda responder a la
necesidad, se le lanzará al usuario un cuadro de diálogo en el cual podrá elegir cuál aplicación es la más
conveniente para él.
Esta selección de aplicaciones se basa en el uso de Intent Filters que se definen en el archivo
AndroidManifest.xml.
Para reaccionar a determinado Intent implícito un componente de la aplicación debe estar registrado a través
de un IntentFilter en el archivo AndroidManifest.xml para este evento.
En caso de que el componente no defina un intent filter únicamente podrá ser llamado a través de un Intent
explícito.
Intent como lanzadores de eventos
Los Intents también pueden ser utilizados para lanzar mensajes de tipo broadcast dentro del sistema. Una
aplicación Android puede registrar Broadcast Receivers para esos eventos y responder acorde a lo que se
necesite. El sistema Android también utiliza Intents para los eventos de tipo broadcast. Nuestras aplicaciones
pueden registrar también este tipo de eventos (se ha recibido un nuevo mail, la descarga se ha completado
con éxito, se está recibiendo una llamada, etc.) para que el teléfono reaccione de forma adecuada.
Iniciando actividades y subactividades
Para iniciar una actividad se utiliza el método startActivity(Intent) si no es necesario retornar un valor
en la actividad en la que se ha hecho el llamado.
Si por el contrario necesitamos algún tipo de información desde la actividad que se ha llamado entonces nos
convendrá utilizar el método startActivityForResult(). Una vez que la llamada a la actividad ha
finalizado, el método onActivityResult() en la actividad que realizó el llamado será ejecutado. Si utilizas el
método startActivityForResult(), la actividad que se inicia es la que se considera como la sub-actividad.
v 2.3
4 de 4