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