<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="es">
	<id>https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Intents_impl%C3%ADcitos._Permisos._Filtros.</id>
	<title>Intents implícitos. Permisos. Filtros. - Historial de revisiones</title>
	<link rel="self" type="application/atom+xml" href="https://manuais.iessanclemente.net/index.php?action=history&amp;feed=atom&amp;title=Intents_impl%C3%ADcitos._Permisos._Filtros."/>
	<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Intents_impl%C3%ADcitos._Permisos._Filtros.&amp;action=history"/>
	<updated>2026-10-25T16:03:23Z</updated>
	<subtitle>Historial de revisiones de esta página en la wiki</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://manuais.iessanclemente.net/index.php?title=Intents_impl%C3%ADcitos._Permisos._Filtros.&amp;diff=57499&amp;oldid=prev</id>
		<title>Carrion: /* Filtros de intencións (Intent Filters) */</title>
		<link rel="alternate" type="text/html" href="https://manuais.iessanclemente.net/index.php?title=Intents_impl%C3%ADcitos._Permisos._Filtros.&amp;diff=57499&amp;oldid=prev"/>
		<updated>2015-10-19T08:13:15Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;Filtros de intencións (Intent Filters)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Página nueva&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==Introdución==&lt;br /&gt;
*Imos continuar coa aplicación desenvolvida no apartado anterior: &amp;#039;&amp;#039;&amp;#039;U3_20_Intents&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Engadiránselle, permisos, filtros, e intents implícitos.&lt;br /&gt;
[[Image:Android_2014_U3_20_LanzarActivity_16.jpg]]&lt;br /&gt;
&lt;br /&gt;
==Permisos==&lt;br /&gt;
*Cando instalamos unha aplicación nun dispositivo real (non nun AVD) se precisa acceder a características que esixen algún tipo de permiso, o proceso de instalación pregunta se estamos dispostos a dar eses permisos para que a aplicación poida funcionar con tódalas súas funcionalidades.&lt;br /&gt;
*Por exemplo, instalando Gmail:&lt;br /&gt;
[[Image:Gmail.png|250px]]&lt;br /&gt;
&lt;br /&gt;
*O proceso de instalación pregunta ao usuario se por exemplo lle deixa acceder a esta aplicación á súa lista de contactos.&lt;br /&gt;
&lt;br /&gt;
*No ficheiro &amp;#039;&amp;#039;&amp;#039;AndroidManifest.xml&amp;#039;&amp;#039;&amp;#039; é onde se declaran os permisos que precisa a aplicación para poder facer uso de funcionalidades protexidas: contactos, cámara, mermoria usb, gps, etc.&lt;br /&gt;
&lt;br /&gt;
*A través de unha ou varias etiquetas &amp;#039;&amp;#039;&amp;#039;&amp;lt;uses-permission&amp;gt;&amp;#039;&amp;#039;&amp;#039; vanse declarar os permisos que precisa a aplicación.&lt;br /&gt;
&lt;br /&gt;
Exemplos de permisos no ficheiro AndroidManifest.xml&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;31-33&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;manifest xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    package=&amp;quot;com.example.u3_20_intents&amp;quot;&lt;br /&gt;
    android:versionCode=&amp;quot;1&amp;quot;&lt;br /&gt;
    android:versionName=&amp;quot;1.0&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;uses-sdk&lt;br /&gt;
        android:minSdkVersion=&amp;quot;16&amp;quot;&lt;br /&gt;
        android:targetSdkVersion=&amp;quot;21&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;application&lt;br /&gt;
        android:allowBackup=&amp;quot;true&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/ic_launcher&amp;quot;&lt;br /&gt;
        android:label=&amp;quot;@string/app_name&amp;quot;&lt;br /&gt;
        android:theme=&amp;quot;@style/AppTheme&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;activity&lt;br /&gt;
            android:name=&amp;quot;.U3_20_Intents&amp;quot;&lt;br /&gt;
            android:label=&amp;quot;@string/app_name&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;intent-filter&amp;gt;&lt;br /&gt;
                &amp;lt;action android:name=&amp;quot;android.intent.action.MAIN&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;category android:name=&amp;quot;android.intent.category.LAUNCHER&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;
        &amp;lt;/activity&amp;gt;&lt;br /&gt;
        &amp;lt;activity&lt;br /&gt;
            android:name=&amp;quot;.RecibirDatos&amp;quot;&lt;br /&gt;
            android:label=&amp;quot;@string/title_activity_recibir_datos&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;/activity&amp;gt;&lt;br /&gt;
    &amp;lt;/application&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.CALL_PHONE&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.INTERNET&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.READ_CONTACTS&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/manifest&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 31&amp;#039;&amp;#039;&amp;#039;: Permiso que &amp;quot;permite&amp;quot; realizar unha chamada de telefono sen pasar a través do interface do teléfono para que o usuario marque.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 32&amp;#039;&amp;#039;&amp;#039;: Permítelle á aplicación abrir conexións de rede.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 33&amp;#039;&amp;#039;&amp;#039;: Da súa lectura pódese concluír o que permite. &lt;br /&gt;
&lt;br /&gt;
*Para coñecer os permisos dispoñibles podemos consultar o seguinte enlace e incluílos directamente no xml: &lt;br /&gt;
**http://developer.android.com/reference/android/Manifest.permission.html&lt;br /&gt;
&lt;br /&gt;
*Tamén se pode realizar de modo gráfico.&lt;br /&gt;
*No ficheiro AndroidManifest.xml premer en &amp;#039;&amp;#039;&amp;#039;Permissions&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Image:Android_2014_U3_20_LanzarActivity_15.jpg|600px]]&lt;br /&gt;
&lt;br /&gt;
*Lembrar que os permisos asígnanse no momento da instalación a aplicación. Nun dispositivo real pídeselle consentimento ao usuario, non así nun AVD.&lt;br /&gt;
&lt;br /&gt;
==Chamadas a intents de modo implícito==&lt;br /&gt;
*Como xa se dixo, un compoñente pode ser lanzado de forma implícita cando se indica a &amp;#039;&amp;#039;&amp;#039;acción&amp;#039;&amp;#039;&amp;#039; que se desexa realizar e se é o caso os datos sobre os que se desexa realizar a acción.&lt;br /&gt;
*Non se vai especificar cal é a activity que vai atender o intent. Incluso se hai varias Activities que poidan atender ese intent o sistema ofrecerá ao usuario as distintas posibilidades para que escolla.&lt;br /&gt;
*Por exemplo, cando dende contactos se desexa enviar un mensaxe a un número de teléfono o sistema ofrece a posibilidade de que se envíe a través de sms, Whatsapp, Viber, etc, se se teñen instalados estes últimos.&lt;br /&gt;
&lt;br /&gt;
*A seguinte imaxe amosa un exemplo no que para abrir unha URL hai dúas aplicacións que o poden facer.&lt;br /&gt;
[[Image:Android_implicit_intent_choice_chrome.png|400px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Para lanzar un intent de modo implícito precísase indicar:&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;Acción (action)&amp;#039;&amp;#039;&amp;#039;: A acción que se desexa levar a cabo. Por exemplo,&lt;br /&gt;
***ACTION_VIEW, para mostrar datos ao usario&lt;br /&gt;
***ACTION_EDIT, para editar os datos que nos pasan&lt;br /&gt;
***ACTION_PICK. selecciona un ítem dun conxunto de datos e devolve o selccionado.&lt;br /&gt;
***ACTION_WEB_SEARCH. busca no navegador as palabras indicadas.&lt;br /&gt;
***etc.&lt;br /&gt;
**&amp;#039;&amp;#039;&amp;#039;Datos (data)&amp;#039;&amp;#039;&amp;#039;: os datos sobre os que se vai operar, por exemplo, unha url, os datos dun contacto,a cadea de busca, etc.&lt;br /&gt;
&lt;br /&gt;
*Exemplo:&lt;br /&gt;
**ACTION_VIEW content://contacts/people/1 -- Amosa a información sobre a persoa con identificador 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Referencias&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
**http://developer.android.com/reference/android/content/Intent.html&lt;br /&gt;
&lt;br /&gt;
==Filtros de intencións (Intent Filters)==&lt;br /&gt;
*Android busca os compoñentes que poden responder a unha &amp;#039;&amp;#039;&amp;#039;Acción&amp;#039;&amp;#039;&amp;#039; nos filtros de intención que se definen no ficheiro &amp;#039;&amp;#039;&amp;#039;AndroidManifest.xml&amp;#039;&amp;#039;&amp;#039; de tódalas aplicacións que están instaladas no dispositivo.&lt;br /&gt;
*Cando se constrúe unha activity nunha aplicación, pódese indicar os filtros de intención de manifestan que esa activity pode dar resposta as &amp;#039;&amp;#039;&amp;#039;Accións&amp;#039;&amp;#039;&amp;#039; que lanzan outras aplicacións.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*No noso caso, imos modificar un chisco o código da actividade secundaria para que poida atender a peticións de visionar urls de tipo &amp;#039;&amp;#039;&amp;#039;http&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
*Así cando se lance, por exemplo, que se desexa ver http://www.google.es o sistema vai ofrecer 2 opcións: o navegador de internet e a nosa actividade secundaria do proxecto (RecibirDatos).&lt;br /&gt;
[[Image:Android_2014_U3_20_LanzarActivity_22.jpg]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
*Para iso é preciso definir que esa Activity pode atender Accións de visionado de datos tipo http.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;28-35&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;utf-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;manifest xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    package=&amp;quot;com.example.u3_20_intents&amp;quot;&lt;br /&gt;
    android:versionCode=&amp;quot;1&amp;quot;&lt;br /&gt;
    android:versionName=&amp;quot;1.0&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;uses-sdk&lt;br /&gt;
        android:minSdkVersion=&amp;quot;16&amp;quot;&lt;br /&gt;
        android:targetSdkVersion=&amp;quot;21&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;application&lt;br /&gt;
        android:allowBackup=&amp;quot;true&amp;quot;&lt;br /&gt;
        android:icon=&amp;quot;@drawable/ic_launcher&amp;quot;&lt;br /&gt;
        android:label=&amp;quot;@string/app_name&amp;quot;&lt;br /&gt;
        android:theme=&amp;quot;@style/AppTheme&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;activity&lt;br /&gt;
            android:name=&amp;quot;.U3_20_Intents&amp;quot;&lt;br /&gt;
            android:label=&amp;quot;@string/app_name&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;intent-filter&amp;gt;&lt;br /&gt;
                &amp;lt;action android:name=&amp;quot;android.intent.action.MAIN&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;category android:name=&amp;quot;android.intent.category.LAUNCHER&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;
        &amp;lt;/activity&amp;gt;&lt;br /&gt;
        &amp;lt;activity&lt;br /&gt;
            android:name=&amp;quot;.RecibirDatos&amp;quot;&lt;br /&gt;
            android:label=&amp;quot;@string/title_activity_recibir_datos&amp;quot; &amp;gt;&lt;br /&gt;
            &amp;lt;intent-filter&amp;gt;&lt;br /&gt;
                &amp;lt;action android:name=&amp;quot;android.intent.action.VIEW&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;category android:name=&amp;quot;android.intent.category.DEFAULT&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
                &amp;lt;data android:scheme=&amp;quot;http&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/intent-filter&amp;gt;&lt;br /&gt;
        &amp;lt;/activity&amp;gt;&lt;br /&gt;
    &amp;lt;/application&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.CALL_PHONE&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.INTERNET&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;uses-permission android:name=&amp;quot;android.permission.READ_CONTACTS&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/manifest&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 28 e 25&amp;#039;&amp;#039;&amp;#039;: delimitan os filtros de intencións para a activity RecibirDatos.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 29:&amp;#039;&amp;#039;&amp;#039; indica para que tipo de accións esta dispoñible esta activity.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 30:&amp;#039;&amp;#039;&amp;#039; A categoría indica as circunstancias nas que se debe desenvolver a acción.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 33:&amp;#039;&amp;#039;&amp;#039; o tipo de datos que pode atender esta activity cando haxa unha intención preguntando por recursos http.&lt;br /&gt;
&lt;br /&gt;
==Caso práctico==&lt;br /&gt;
*A continuación imos engadir unha serie de botóns, modificar o código, etc  ao proxecto.&lt;br /&gt;
*Continuar co proxecto &amp;#039;&amp;#039;&amp;#039;U3_20_Intents&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;gallery caption=&amp;quot;Intents implícitos&amp;quot; widths=&amp;quot;350&amp;quot; heights=&amp;quot;300px&amp;quot; perrow=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_16.jpg| Premer en &amp;#039;&amp;#039;&amp;#039;Amosar contactos&amp;#039;&amp;#039;&amp;#039;. &amp;lt;br&amp;gt;No ficheiro AndroidManifest demos permiso á aplicación para que acceda aos contactos. Para lanzar a seguinte activity da aplicación contactos o intent ten o seguinte formato:&amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039;intent = new Intent(Intent.ACTION_VIEW, Uri.parse(&amp;quot;content://contacts/people/&amp;quot;));&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_17.jpg| A lista de contactos.&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_16.jpg| Premer en &amp;#039;&amp;#039;&amp;#039;Seleccionar contactos&amp;#039;&amp;#039;&amp;#039;. Lánzase o seguinte intent:&amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039; intent = new Intent(Intent.ACTION_PICK, Uri.parse(&amp;quot;content://contacts/people/&amp;quot;));&amp;lt;br&amp;gt;startActivityForResult(intent, COD_CONTACTOS);&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_18.jpg| Seleccionamos un contacto e grazas á Acción coa que se lanzou o intent podemos devolver á actividade principal os datos dese contacto. &lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_19.jpg| Cando volvemos á actividade principal podemos recuperar o nome do contacto seleccionado.&lt;br /&gt;
Image:i.i|&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_16.jpg| Premer en &amp;#039;&amp;#039;&amp;#039;Chamar por teléfono&amp;#039;&amp;#039;&amp;#039;. Vaise lanzar o seguinte intent: &amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039; intent = new Intent(Intent.ACTION_CALL, Uri.parse(&amp;quot;tel:(+34)981445566&amp;quot;));&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_20.jpg|Xa iniciou a marcación ao teléfono indicado.&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_16.jpg| Premer en &amp;#039;&amp;#039;&amp;#039;Marcar nº teléfono&amp;#039;&amp;#039;&amp;#039;. Vainos lanzar a activity na que nos decidimos se marcamos o número a marcar.&amp;lt;br&amp;gt;intent = new Intent(Intent.ACTION_DIAL, Uri.parse(&amp;quot;tel:(+34)986112233&amp;quot;));&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_21.jpg| Activity na que o usuario marca o número de teléfono, pero que xa lle vén cuberto o campo.&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_16.jpg| Premer agora en &amp;#039;&amp;#039;&amp;#039;Abrir navegador*&amp;#039;&amp;#039;&amp;#039;. Onde se van ofrecer un par de opcións para abrir a url especificada.&amp;lt;br&amp;gt;&amp;#039;&amp;#039;&amp;#039;intent = new Intent(Intent.ACTION_VIEW, Uri.parse(&amp;quot;http://www.google.es/&amp;quot;));&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_22.jpg| Activities que teñen definidos filtros de intención nos seus ficheiros AndroidMnaifest para procesar datos de tipo http.&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_23.jpg| Neste caso seleccionouse o navegador web.&lt;br /&gt;
Image:Android_2014_U3_20_LanzarActivity_24.jpg| Neste outro caso, seleccionouse a nosa actividade secundaria (RecibirDatos) e o que fai é amosar a URL.&lt;br /&gt;
&amp;lt;/gallery&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XML do Layout principal===&lt;br /&gt;
*Engadiuse unha serie de botóns, todos chaman ao mesmo método. (Liñas 51-91)&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;51-91&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:orientation=&amp;quot;vertical&amp;quot;&lt;br /&gt;
    android:padding=&amp;quot;5dp&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;LinearLayout&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:orientation=&amp;quot;horizontal&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;TextView&lt;br /&gt;
            android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
            android:text=&amp;quot;Dime o teu nome&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;EditText&lt;br /&gt;
            android:id=&amp;quot;@+id/et_nome&amp;quot;&lt;br /&gt;
            android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
            android:layout_height=&amp;quot;wrap_content&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;CheckBox&lt;br /&gt;
        android:id=&amp;quot;@+id/chk_destruir&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:checked=&amp;quot;false&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;Destruír esta activity ao chamar á 2ª&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_gravity=&amp;quot;center_horizontal&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;Chamadas explícitas a intents&amp;quot;&lt;br /&gt;
        android:textColor=&amp;quot;#00F&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
        android:id=&amp;quot;@+id/btn_enviar&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:onClick=&amp;quot;onEnviarClick&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;Chamar 2ª Activity: Recibir Datos&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
        android:id=&amp;quot;@+id/btn_calculadora&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:onClick=&amp;quot;onCalculadoraClick&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;Calculadora&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
       android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
       android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
       android:layout_gravity=&amp;quot;center_horizontal&amp;quot;&lt;br /&gt;
       android:text=&amp;quot;Chamadas implícitas a intents&amp;quot;&lt;br /&gt;
       android:textColor=&amp;quot;#00F&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
       android:id=&amp;quot;@+id/btn_amosar_contactos&amp;quot;&lt;br /&gt;
       android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
       android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
       android:onClick=&amp;quot;chamarIntent&amp;quot;&lt;br /&gt;
       android:text=&amp;quot;Amosar contactos&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
       android:id=&amp;quot;@+id/btn_seleccionar_contacto&amp;quot;&lt;br /&gt;
       android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
       android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
       android:onClick=&amp;quot;chamarIntent&amp;quot;&lt;br /&gt;
       android:text=&amp;quot;Seleccionar contacto&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
       android:id=&amp;quot;@+id/btn_chamar_tel&amp;quot;&lt;br /&gt;
       android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
       android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
       android:onClick=&amp;quot;chamarIntent&amp;quot;&lt;br /&gt;
       android:text=&amp;quot;Chamar por teléfono&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
       android:id=&amp;quot;@+id/btn_marcar_tel&amp;quot;&lt;br /&gt;
       android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
       android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
       android:onClick=&amp;quot;chamarIntent&amp;quot;&lt;br /&gt;
       android:text=&amp;quot;Marcar nº de teléfono&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
       android:id=&amp;quot;@+id/btn_navegador&amp;quot;&lt;br /&gt;
       android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
       android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
       android:onClick=&amp;quot;chamarIntent&amp;quot;&lt;br /&gt;
       android:text=&amp;quot;Abrir navegador*&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Código Java da activity principal===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;19, 59-66,78-106&amp;quot; &amp;gt;&lt;br /&gt;
package com.example.u3_20_intents;&lt;br /&gt;
&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.content.Intent;&lt;br /&gt;
import android.database.Cursor;&lt;br /&gt;
import android.net.Uri;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.provider.ContactsContract;&lt;br /&gt;
import android.view.Menu;&lt;br /&gt;
import android.view.View;&lt;br /&gt;
import android.widget.CheckBox;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
import android.widget.Toast;&lt;br /&gt;
&lt;br /&gt;
public class U3_20_Intents extends Activity {&lt;br /&gt;
&lt;br /&gt;
	public final static String NOME = &amp;quot;com.example.NOME&amp;quot;;&lt;br /&gt;
	private static final int COD_PETICION = 33;&lt;br /&gt;
	private static final int COD_CONTACTOS = 7;&lt;br /&gt;
&lt;br /&gt;
	TextView tvNome;&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_u3_20__intents);&lt;br /&gt;
		tvNome = (TextView) findViewById(R.id.et_nome);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onCreateOptionsMenu(Menu menu) {&lt;br /&gt;
		// Inflate the menu; this adds items to the action bar if it is present.&lt;br /&gt;
		getMenuInflater().inflate(R.menu.u3_20__intents, menu);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void onEnviarClick(View view) {&lt;br /&gt;
		CheckBox chkDestruir = (CheckBox) findViewById(R.id.chk_destruir);&lt;br /&gt;
&lt;br /&gt;
		Intent intent = new Intent(this, RecibirDatos.class);&lt;br /&gt;
		intent.putExtra(NOME, tvNome.getText().toString());&lt;br /&gt;
&lt;br /&gt;
		// startActivity(intent);&lt;br /&gt;
		startActivityForResult(intent, COD_PETICION);&lt;br /&gt;
&lt;br /&gt;
		if (chkDestruir.isChecked())&lt;br /&gt;
			finish();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {&lt;br /&gt;
&lt;br /&gt;
		if (requestCode == COD_PETICION) {&lt;br /&gt;
			if (resultCode == RESULT_OK) {&lt;br /&gt;
				if (data.hasExtra(&amp;quot;APELIDO&amp;quot;))&lt;br /&gt;
					Toast.makeText(this, tvNome.getText() + &amp;quot;\nO teu apelido é: &amp;quot; + data.getExtras().getString(&amp;quot;APELIDO&amp;quot;), Toast.LENGTH_SHORT).show();&lt;br /&gt;
&lt;br /&gt;
			} else&lt;br /&gt;
				Toast.makeText(this, &amp;quot;Saíches da actividade secundaria sen premer o botón Pechar&amp;quot;, Toast.LENGTH_SHORT).show();&lt;br /&gt;
		} else if (requestCode == COD_CONTACTOS &amp;amp;&amp;amp; resultCode == RESULT_OK) {&lt;br /&gt;
			Uri contactoData = data.getData();&lt;br /&gt;
			Cursor c = managedQuery(contactoData, null, null, null, null);&lt;br /&gt;
			if (c.moveToFirst()) {&lt;br /&gt;
				String nombre = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));&lt;br /&gt;
				Toast.makeText(this, &amp;quot;Contacto: &amp;quot; + nombre, Toast.LENGTH_LONG).show();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void onCalculadoraClick(View v) {&lt;br /&gt;
&lt;br /&gt;
		Intent intent = new Intent();&lt;br /&gt;
		intent.setClassName(&amp;quot;com.android.calculator2&amp;quot;, &amp;quot;com.android.calculator2.Calculator&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
		startActivity(intent);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void chamarIntent(View view) {&lt;br /&gt;
		Intent intent = null;&lt;br /&gt;
		switch (view.getId()) {&lt;br /&gt;
		case R.id.btn_seleccionar_contacto:&lt;br /&gt;
			intent = new Intent(Intent.ACTION_PICK, Uri.parse(&amp;quot;content://contacts/people/&amp;quot;));&lt;br /&gt;
			startActivityForResult(intent, COD_CONTACTOS);&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case R.id.btn_amosar_contactos:&lt;br /&gt;
			intent = new Intent(Intent.ACTION_VIEW, Uri.parse(&amp;quot;content://contacts/people/&amp;quot;));&lt;br /&gt;
			startActivity(intent);&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case R.id.btn_chamar_tel:&lt;br /&gt;
			intent = new Intent(Intent.ACTION_CALL, Uri.parse(&amp;quot;tel:(+34)981445566&amp;quot;));&lt;br /&gt;
			startActivity(intent);&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case R.id.btn_marcar_tel:&lt;br /&gt;
			intent = new Intent(Intent.ACTION_DIAL, Uri.parse(&amp;quot;tel:(+34)986112233&amp;quot;));&lt;br /&gt;
			startActivity(intent);&lt;br /&gt;
			break;&lt;br /&gt;
&lt;br /&gt;
		case R.id.btn_navegador:&lt;br /&gt;
			intent = new Intent(Intent.ACTION_VIEW, Uri.parse(&amp;quot;http://www.google.es/&amp;quot;));&lt;br /&gt;
			startActivity(intent);&lt;br /&gt;
			break;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void finish() {&lt;br /&gt;
		super.finish();&lt;br /&gt;
		Toast.makeText(this, &amp;quot;Mataches a actividade principal&amp;quot;, Toast.LENGTH_SHORT).show();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liña 19&amp;#039;&amp;#039;&amp;#039;: Créase unha nova constante de tipo enteiro cun valor calquera para cando chamemos a activity de contactos para que nos devolva un contacto.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 59-66&amp;#039;&amp;#039;&amp;#039;: Revisamos cando se volva dunha actividade secundaria, se é a de Contactos. Nese caso (escápase aos obxectivos desta unidade) créase un cursos para procesar os datos recibidos da activity contactos.&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 78-106&amp;#039;&amp;#039;&amp;#039;: Procesado dos distintos botóns, creación dos intents en función do tipo de acción e datos que se desexan procesar. &lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 82 e 83&amp;#039;&amp;#039;&amp;#039;: Observar como se chama a activity de contactos para que logo nos devolva o contacto seleccionado.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===XML do Layout da Activity Secundaria: RecibirDatos===&lt;br /&gt;
*Non hai ningún cambio con respecto ao proxecto anterior.&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;xml&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;&amp;quot; &amp;gt;&lt;br /&gt;
&amp;lt;LinearLayout xmlns:android=&amp;quot;http://schemas.android.com/apk/res/android&amp;quot;&lt;br /&gt;
    xmlns:tools=&amp;quot;http://schemas.android.com/tools&amp;quot;&lt;br /&gt;
    android:layout_width=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:layout_height=&amp;quot;match_parent&amp;quot;&lt;br /&gt;
    android:orientation=&amp;quot;vertical&amp;quot; &amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;TextView&lt;br /&gt;
        android:id=&amp;quot;@+id/tv_resultado&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_gravity=&amp;quot;center_horizontal&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;resultado&amp;quot;&lt;br /&gt;
        android:textSize=&amp;quot;20sp&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;EditText&lt;br /&gt;
        android:id=&amp;quot;@+id/et_apelido&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_gravity=&amp;quot;center_horizontal&amp;quot;&lt;br /&gt;
        android:hint=&amp;quot;Introduce o teu apelido&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;Button&lt;br /&gt;
        android:id=&amp;quot;@+id/btn_pechar&amp;quot;&lt;br /&gt;
        android:layout_width=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_height=&amp;quot;wrap_content&amp;quot;&lt;br /&gt;
        android:layout_gravity=&amp;quot;center_horizontal&amp;quot;&lt;br /&gt;
        android:onClick=&amp;quot;onPecharClick&amp;quot;&lt;br /&gt;
        android:text=&amp;quot;Pechar&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/LinearLayout&amp;gt;&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
&lt;br /&gt;
===O código Java da Activity Secundaria: RecibirDatos===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;java&amp;quot; line enclose=&amp;quot;div&amp;quot; highlight=&amp;quot;24-28&amp;quot; &amp;gt;&lt;br /&gt;
package com.example.u3_20_intents;&lt;br /&gt;
&lt;br /&gt;
import android.app.Activity;&lt;br /&gt;
import android.content.Intent;&lt;br /&gt;
import android.os.Bundle;&lt;br /&gt;
import android.view.Menu;&lt;br /&gt;
import android.view.View;&lt;br /&gt;
import android.widget.EditText;&lt;br /&gt;
import android.widget.TextView;&lt;br /&gt;
&lt;br /&gt;
public class RecibirDatos extends Activity {&lt;br /&gt;
	// String Forma_Pechar_Activity;&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	protected void onCreate(Bundle savedInstanceState) {&lt;br /&gt;
		super.onCreate(savedInstanceState);&lt;br /&gt;
		setContentView(R.layout.activity_recibir_datos);&lt;br /&gt;
		// Forma_Pechar_Activity = &amp;quot; Premendo botonera Retroceso&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		TextView tvResultado = (TextView) findViewById(R.id.tv_resultado);&lt;br /&gt;
&lt;br /&gt;
		Intent intent = getIntent();&lt;br /&gt;
&lt;br /&gt;
		if (&amp;quot;http&amp;quot;.equals(intent.getScheme()))&lt;br /&gt;
&lt;br /&gt;
			tvResultado.setText(&amp;quot;URL: &amp;quot; + intent.getDataString());&lt;br /&gt;
		else&lt;br /&gt;
			tvResultado.setText(&amp;quot;Ola &amp;quot; + intent.getExtras().getString(U3_20_Intents.NOME));&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	@Override&lt;br /&gt;
	public boolean onCreateOptionsMenu(Menu menu) {&lt;br /&gt;
		// Inflate the menu; this adds items to the action bar if it is present.&lt;br /&gt;
		getMenuInflater().inflate(R.menu.recibir_datos, menu);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void onPecharClick(View view) {&lt;br /&gt;
		// Forma_Pechar_Activity = &amp;quot; Premendo botón Pechar&amp;quot;;&lt;br /&gt;
		EditText et_apelido = (EditText) findViewById(R.id.et_apelido);&lt;br /&gt;
&lt;br /&gt;
		Intent datos_volta = new Intent();&lt;br /&gt;
		datos_volta.putExtra(&amp;quot;APELIDO&amp;quot;, et_apelido.getText().toString());&lt;br /&gt;
		setResult(RESULT_OK, datos_volta);&lt;br /&gt;
		finish();&lt;br /&gt;
&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public void finish() {&lt;br /&gt;
		super.finish();&lt;br /&gt;
		// Toast.makeText(this, &amp;quot;Saíches da actividade secundaria: &amp;quot; +&lt;br /&gt;
		// Forma_Pechar_Activity, Toast.LENGTH_SHORT).show();&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight &amp;gt;&lt;br /&gt;
*&amp;#039;&amp;#039;&amp;#039;Liñas 24-28&amp;#039;&amp;#039;&amp;#039;: Engadiuse a posibilidade de poder procesar intents cuxo esquema (getSchema) sexa de tipo http. Nese caso simplemente amosamos a URL á que desexaba conectarse o usuario.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt; -- [[Usuario:angelfg|Ángel D. Fernández González]] e [[Usuario:Carrion|Carlos Carrión Álvarez]] -- (2015).&lt;/div&gt;</summary>
		<author><name>Carrion</name></author>
	</entry>
</feed>