Teoría Intents Fecha 2016/04/12 Intent Un Intent es una descripción abstracta de una operación que se quiere llevar a cabo. Puede utilizarse para iniciar una nueva actividad (startActivity), para enviar información a algún componente del tipo broadcastReceiver interesado (broadcastIntent), y para iniciar un servicio o linkearse algún servicio (startService, bindService) o comunicarse con un servicio que se ejecuta en segundo plano (background Service). Un Intent provee la facilidad de ligar aplicaciones tardíamente (no en tiempo de ejecución) es decir un Late Runtime Binding entre diferentes aplicaciones. Su utilización más significativa es la de lanzar nuevas Activities. Un Intent representa la voluntad de realizar alguna acción o tarea, como realizar una llamada de teléfono o visualizar una página web. Un Intent nos permite lanzar una actividad o servicio de nuestra aplicación o de una aplicación diferente. Tienen un gran potencial en Android, por lo que resulta importante conocerlas y dominarlas. Tipos de Intents Intents explícitos: Se indica exactamente el componente a lanzar. Su utilización típica es la de ir ejecutando los diferentes componentes internos de una aplicación. Por ejemplo, desde la actividad MainActivity lanzamos AcercaDeActivity por medio de un Intent explícito. Intent implícito: Pueden solicitar tareas abstractas, como “quiero tomar una foto” o “quiero enviar un mensaje”. Además las intenciones se resuelven en tiempo de ejecución, de forma que el sistema mirará cuantos componentes han registrado la posibilidad de ejecutar ese tipo de Intent. Si encuentra varias el sistema puede preguntar al usuario el componente que prefiere utilizar. Además, los Intents ofrecen un servicio de paso de mensajes (parámetros) que permite interconectar datos entre componentes. Se utilizan Intents cada vez que queramos: Lanzar una actividad (startActivity() y startActivityForResult()) Lanzar un servicio (startService()) Lanzar un anuncio de tipo broadcast (sendBroadcast()) Conectarnos con un servicio (bindService()) En muchas ocasiones un Intent no será inicializada por la aplicación, si no por el sistema, por ejemplo, cuando pedimos visualizar una página Web. En otras ocasiones será necesario que la aplicación inicialice su propia intención. Para ello se creará un objeto de la clase Intent. Teoría Intents Fecha 2016/04/12 Cuando se crea un Intent (es decir, se instancia un objeto de tipo Intent) esta contiene información de interés para que el sistema trate adecuadamente la intención o para el componente que recibe la intención. Puede incluir la siguiente información: Nombre del componente: Identificamos el componente que queremos lanzar con la intención. Hay que utilizar el nombre de clase totalmente cualificado que queremos lanzar (org.pulman.tp03.AcercaDe). El nombre del componente es opcional. En caso de no indicarse se utilizará otra información de la intención para obtener el componente a lanzar. A este tipo de intenciones se les conocía como intenciones explícitas. Acción: Una cadena de caracteres donde indicamos la acción a realizar o en caso de un Receptor de anuncios (Broadcast receiver), la acción que tuvo lugar y que queremos reportar. La clase Intent define una serie de constantes para acciones genéricas que se enumeran a continuación: Teoría Intents Iniciando una nueva activity y enviarle parámetros. Como un novato! public class MainActivity extends ActionBarActivity { private void IniciarSegundaActividad(){ Intent nuevaActivity = new Intent(this, Main2Activity.class); Bundle datos = new Bundle(); nuevaActivity.putExtra("ParamNombre", "Erika Galindo"); nuevaActivity.putExtra("ParamEdad" , 35); startActivity(nuevaActivity); } ... } public class Main2Activity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Intent elIntent = getIntent(); // gets the previously created intent String parametro1 = elIntent.getStringExtra("ParamNombre"); Integer parametro2 = elIntent.getIntExtra("ParamEdad", 0); } ... } Con un poco más de Experiencia (digamos dos meses de programación) public class MainActivity extends ActionBarActivity { private void IniciarSegundaActividad (){ Intent nuevaActivity = new Intent(this, Main2Activity.class); Bundle datos = new Bundle(); datos.putString("ParamNombre", "Erika Galindo"); datos.putInt("ParamEdad", 35); nuevaActivity.putExtras(datos); startActivity(nuevaActivity); } ... } public class Main2Activity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { // Igual que arriba } ... } Fecha 2016/04/12 Teoría Intents Fecha 2016/04/12 Como se debe hacer correctamente public class MainActivity extends ActionBarActivity { public static final String PARAMETRO1 = "com.example.polshu.tpn01.PARAMETRO1"; public static final String PARAMETRO2 = "com.example.polshu.tpn01.PARAMETRO2"; private void IniciarSegundaActividad(){ Intent nuevaActivity = new Intent(this, Main2Activity.class); Bundle datos = new Bundle(); datos.putString(MainActivity.PARAMETRO1, "Erika Galindo"); datos.putInt(MainActivity.PARAMETRO2, 35); nuevaActivity.putExtras(datos); startActivity(nuevaActivity); } ... } public class Main2Activity extends ActionBarActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Intent elIntent = getIntent(); // gets the previously created intent Bundle datos = elIntent.getExtras(); String parametro1 = datos.getString (MainActivity.PARAMETRO1); Integer parametro2 = datos.getInt (MainActivity.PARAMETRO2, 0); } ... } Teoría Intents Ejemplos de Intents utiles Abrir una pagina web public void paginaWeb(View view) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com/")); startActivity(intent); } Llamar por Telefono public void llamadaTelefono(View view) { Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:1554448888")); startActivity(intent); // // El punto de arriba me agrego lo siguiente en el AndroidManifest.xml // <uses-permission android:name="android.permission.CALL_PHONE" /> // } Abrir Google Maps en una ubicacion especifica. public void googleMaps(View view) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("geo:41.656313,-0.877351")); startActivity(intent); } Tomar una Foto public void tomarFoto(View view) { Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); startActivity(intent); } Enviar un Email public void mandarEmail(View view) { Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_SUBJECT, "Asunto del correo"); intent.putExtra(Intent.EXTRA_TEXT, "Este es el texto del correo"); intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"polshu@polshu.com.ar"}); startActivity(intent); } Fecha 2016/04/12