B4A en español - Juan Antonio Villalpando
(BASIC4Android)
-- Tutorial de B4A --
Volver al índice del tutorial
____________________________
55.- Intent.
- Mediante Intent podemos comunicar una aplicación con otra. Podemos abrir otra aplicación, incluso suministrarle datos a esa otra aplicación.
Un Intent es una llamada de una aplicación a otra.
En este tutorial he puesto una serie de ideas y ejemplos del objeto intent.
_____________________________________________________________
1.- Código sobre Intent.
Este código es una adaptación del presentado en los tutoriales por el usuario thedesolatesoul y que podemos ver en esta página.
Trata de que ponemos en una aplicación llamada intent_provider, dos datos: un nombre y un apellido.
Luego otra aplicación llamada intent_requester, le pide a la aplicación anterior esos dos datos.
_________________________________
1.- Aplicación intent_provider
1.- Creamos una aplicación llamada intent_provider.
2.- Llamamos a su paquete com.intent_provider
Project / Package name: com.intent_provider
3.- Copiamos y pegamos este código...
intent_provider |
#Region Project Attributes
#ApplicationLabel: Intent Provider
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
' Adaptado por Juan Antonio Villalpando
' juana1991@yahoo.com
' http://www.basic4ppc.com/android/forum/threads/tutorial-inter-app-communication-with-intents.30608/#content
Dim nombre, apellido As String
End Sub
Sub Globals
Dim etiqueta1, etiqueta2 As Label
Dim casillero1, casillero2 As EditText
Dim boton As Button
End Sub
Sub Activity_Create(FirstTime As Boolean)
' Crea etiqueta1 (Label)
etiqueta1.Initialize("etiqueta1")
etiqueta1.TextSize = 20
etiqueta1.TextColor = Colors.Yellow
etiqueta1.Color = Colors.Red
etiqueta1.Gravity = Gravity.CENTER
etiqueta1.Text = "Nombre"
Activity.AddView(etiqueta1, 10dip, 10dip, 100dip, 35dip)
' Crea etiqueta2 (Label)
etiqueta2.Initialize("etiqueta1")
etiqueta2.TextSize = 20
etiqueta2.TextColor = Colors.Yellow
etiqueta2.Color = Colors.Red
etiqueta2.Gravity = Gravity.CENTER
etiqueta2.Text = "Apellido"
Activity.AddView(etiqueta2, 10dip, 70dip, 100dip, 35dip)
' Crea casillero1 (EditText)
casillero1.Initialize("casillero1")
casillero1.TextSize = 15
casillero1.Color = Colors.LightGray
casillero1.Gravity = Gravity.CENTER_VERTICAL
casillero1.Text = "Nombre"
Activity.AddView(casillero1, 120dip, 10dip, 120dip, 35dip)
' Crea casillero1 (EditText)
casillero2.Initialize("casillero2")
casillero2.TextSize = 15
casillero2.Color = Colors.LightGray
casillero2.Gravity = Gravity.CENTER_VERTICAL
casillero2.Text = "Apellido"
Activity.AddView(casillero2, 120dip, 70dip, 120dip, 35dip)
' Crea Botón (Button)
boton.Initialize("boton")
boton.TextColor = Colors.Red
boton.Text = "Establecer valores"
Activity.AddView(boton, 0dip, 170dip, 100%x, 10%y)
End Sub
Sub Activity_Resume
Dim In As Intent
In = Activity.GetStartingIntent
If In <> Null Then
If In.HasExtra("Informacion") Then
SendSettings(In)
Activity.Finish
Return
End If
End If
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub SendSettings(In As Intent)
Dim returnIntent As Intent
returnIntent.Initialize(In.GetExtra("Callback"),"")
returnIntent.AddCategory("android.intent.category.DEFAULT")
returnIntent.PutExtra("elnombre", nombre)
returnIntent.PutExtra("elapellido", apellido)
StartActivity(returnIntent) 'Or StartService(returnIntent)
End Sub
Sub boton_Click
nombre = casillero1.Text
apellido = casillero2.Text
End Sub
|
4.- Luego vamos a su Manifest y pegamos este código al final del texto ya existente.
Project / Manifest Editor
Project / Manifest Editor |
AddActivityText(Main,
<intent-filter>
<action android:name="com.intent_provider.REQUEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>)
|
_________________________________________________
2.- Aplicación intent_requester
1.- Creamos una aplicación llamada intent_requester.
2.- Llamamos a su paquete com.intent_requester
Project / Package name: com.intent_requester
3.- Copiamos y pegamos este código...
intent_requester |
#Region Project Attributes
#ApplicationLabel: Intent Requester
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
' Adaptado por Juan Antonio Villalpando
' juana1991@yahoo.com
' http://www.basic4ppc.com/android/forum/threads/tutorial-inter-app-communication-with-intents.30608/#content
End Sub
Sub Globals
Dim etiqueta3, etiqueta4 As Label
Dim boton As Button
End Sub
Sub Activity_Create(FirstTime As Boolean)
' Crea etiqueta3 (Label)
etiqueta3.Initialize("etiqueta3")
etiqueta3.TextSize = 20
etiqueta3.TextColor = Colors.Yellow
etiqueta3.Color = Colors.Red
etiqueta3.Gravity = Gravity.CENTER
etiqueta3.Text = "Nombre"
Activity.AddView(etiqueta3, 10dip, 10dip, 150dip, 30dip)
' Crea etiqueta4 (Label)
etiqueta4.Initialize("etiqueta4")
etiqueta4.TextSize = 20
etiqueta4.TextColor = Colors.Yellow
etiqueta4.Color = Colors.Red
etiqueta4.Gravity = Gravity.CENTER
etiqueta4.Text = "Apellido"
Activity.AddView(etiqueta4, 10dip, 60dip, 150dip, 30dip)
' Crea Botón (Button)
boton.Initialize("boton")
boton.TextColor = Colors.Red
boton.Text = "Pulsa para ver"
Activity.AddView(boton, 0dip, 170dip, 100%x, 10%y)
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub RequestSettings
Dim In As Intent
In.Initialize("com.intent_provider.REQUEST","")
In.AddCategory("android.intent.category.DEFAULT")
In.PutExtra("Callback","com.intent_requester.CALLBACK")
In.PutExtra("Informacion","True")
StartActivity(In) 'Or StartService(returnIntent)
End Sub
Sub boton_Click
RequestSettings
Dim In As Intent
In = Activity.GetStartingIntent
If In <> Null Then
' If In.HasExtra("elnombre") Then
etiqueta3.Text=In.GetExtra("elnombre")
etiqueta4.Text=In.GetExtra("elapellido")
' End If
End If
End Sub
|
4.- Luego vamos a su Manifest y pegamos este código al final del texto ya existente.
Project / Manifest Editor
Project / Manifest Editor |
AddActivityText(Main,
<intent-filter>
<action android:name="com.intent_requester.CALLBACK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>)
|
Ya tenemos las dos aplicaciones.
Ejecutamos intent_provider, escribimos un nombre y un apellido y pulsamos el botón para asignarlo a las variables.
Luego ejecutamos la aplicación intent_requester. Pulsamos el botón un par de veces y los datos de la aplicación anterior pasarán a ésta.
______________________
- Comentarios.
Para entender el modo de funcionamiento convendría poner en la pantalla de inicio, un acceso directo a cada uno de las dos aplicaciones.
Los códigos anteriores son experimentales, he mantenido la estructura original que presentan en el foro.
En vez de utilizar Activity, se podría haber utilizado un Servicio.
Es un código algo complicado de entender, pero echándole un poco de tiempo podemos sonsacar cómo funciona.
El Requester le pide al Provider dos datos mediante la Subrutina RequestSettings,
El Provider es una aplicación con una Activity (Main). Se encontrará en estado... digamos "durmiente", es decir que ha funcionado anteriormente y ahora se encuentra en la memoria del móvil, pero sin actividad. Si entraran en funcionamiento otras aplicaciones "echarían" al Provider de la memoria.
En cambio si el Provider fuera un Servicio, en vez de un Activity, quedaría en memoria y "nadie lo echaría".
En nuesto caso está puesto como Activity con lo cual funcionará hasta que no se llene la memoria con más aplicaciones.
Bien. El Provider está "durmiendo" en la memoria, recibe una llama del Requester en
In = Activity.GetStartingIntent
If In <> Null Then
que desencadena que "despierte", por eso está en la parte de Resume, que significa "Volver o continuar".
La Subrutina Resume llama a la Subrutina SendSetting donde se produce el envío de los datos.
El Requester envió...
In.PutExtra("Callback","com.intent_requester.CALLBACK")
El Provider lee...
returnIntent.Initialize(In.GetExtra("Callback"),"")
de esta manera sabé a donde lo tiene que enviar. Callback = com.intent_requester.CALLBACK
mediante PutExtra envía los datos de nombre y apellido.
Después de enviar la información el Provider vuelve a "dormir" mediante su: Activity.Finish
El Requester recibe los datos mediante
Dim In As Intent
In = Activity.GetStartingIntent
y los pone en las etiquetas mediante los GetExtra.
- El código se prodría haber simplificado, pero lo he mantenido de esa manera para que esté relacionado con el original del foro, es un código didáctico que el lector puede utilizar para aprender cómo enviar datos de una aplicación a otra (mientras esta otra este "durmiendo").
Como he comentado anteriormente sería conveniente que el Provider trabaje como Servicio para asegurarnos de que siempre esté "despierto".
________________________________
2.- Otro código sobre Intent.
Ahora el proveedor es un Servicio.
En este caso el Servidor contiene el nombre, apellido de un hombre y una mujer. El cliente solicitará esos datos y el Servidor lo suministrará, además también suministrará la hora.
1.- Aplicación intent_servidor_hora
1.- Creamos una aplicación llamada intent_servidor_hora
2.- Llamamos a su paquete com.intent_servidor_hora
Project / Package name: com.intent_servidor_hora
3.- Copiamos y pegamos este código... en Main
intent_servidor_hora (Main) |
#Region Project Attributes
#ApplicationLabel: Intent Servidor Hora
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' enero 2014
End Sub
Sub Globals
Dim etiqueta1 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
' Crea etiqueta1 (Label)
etiqueta1.Initialize("etiqueta1")
etiqueta1.TextSize = 20
etiqueta1.TextColor = Colors.Yellow
etiqueta1.Color = Colors.Red
etiqueta1.Gravity = Gravity.CENTER
etiqueta1.Text = "Servidor"
Activity.AddView(etiqueta1, 10dip, 10dip, 100dip, 35dip)
StartService(servicio_hora)
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
|
4.- Creamos un módulo de Servicio llamado: servicio_hora
Project / Add New Module / Service Module: servicio_hora
5.- Copiamos y pegamos este código en el servicio_hora
servicio_hora |
#Region Service Attributes
#StartAtBoot: False
#End Region
Sub Process_Globals
Dim quees, nombre, apellido As String
Dim quienllama As String
Dim Tiempo, hora, minuto, segundo As Long
Dim total As String
End Sub
Sub Service_Create
End Sub
Sub Service_Start (StartingIntent As Intent)
Log(StartingIntent)
Log(StartingIntent.GetExtra("Quienllama"))
Log(StartingIntent.GetExtra("quees"))
quienllama = StartingIntent.GetExtra("Quienllama")
quees = StartingIntent.GetExtra("quees")
Select Case quees
Case "hombre"
nombre = "Juan"
apellido = "Villalpando"
Case "mujer"
nombre = "Eva"
apellido = "Mariana"
End Select
Dim In As Intent
In.Initialize("","")
If StartingIntent.Action = "com.intent_servidor_hora.REQUEST" Then
SendSettings(In)
' StopService("servicio_hora") ' Parar el Servicio
Return
End If
End Sub
Sub SendSettings(In As Intent)
Dim returnIntent As Intent
returnIntent.Initialize(quienllama,"")
' returnIntent.AddCategory("android.intent.category.DEFAULT")
returnIntent.PutExtra("elnombre", nombre)
returnIntent.PutExtra("elapellido", apellido)
Lahora
returnIntent.PutExtra("lahora", total)
StartActivity(returnIntent)
End Sub
Sub Lahora
Tiempo = DateTime.Now
hora = DateTime.GetHour(Tiempo)
minuto = DateTime.GetMinute(Tiempo)
segundo = DateTime.GetSecond(Tiempo)
total= hora & ":" & minuto & ":" & segundo
End Sub
Sub Service_Destroy
End Sub
|
6.- Luego vamos a su Manifest y pegamos este código al final del texto ya existente.
Project / Manifest Editor
Project / Manifest Editor |
AddServiceText(servicio_hora,
<intent-filter>
<action android:name="com.intent_servidor_hora.REQUEST" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>)
|
Ya tenemos la aplicación servidora, ahora vamos a crear la aplicación cliente.
_________________________________________________
2.- Aplicación intent_cliente_hora
1.- Creamos una aplicación llamada intent_cliente_hora.
2.- Llamamos a su paquete com.intent_cliente_hora
Project / Package name: com.intent_cliente_hora
3.- Copiamos y pegamos este código...
intent_cliente_hora |
#Region Project Attributes
#ApplicationLabel: Intent Cliente Hora
#VersionCode: 1
#VersionName:
'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: unspecified
#CanInstallToExternalStorage: False
#End Region
#Region Activity Attributes
#FullScreen: False
#IncludeTitle: True
#End Region
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
' enero 2014
End Sub
Sub Globals
Dim etiqueta3, etiqueta4, etiqueta5 As Label
Dim boton1, boton2 As Button
Dim In As Intent
Dim persona As String
End Sub
Sub Activity_Create(FirstTime As Boolean)
' Crea etiqueta3 (Label)
etiqueta3.Initialize("etiqueta3")
etiqueta3.TextSize = 20
etiqueta3.TextColor = Colors.Yellow
etiqueta3.Color = Colors.Red
etiqueta3.Gravity = Gravity.CENTER
etiqueta3.Text = "Nombre"
Activity.AddView(etiqueta3, 10dip, 10dip, 150dip, 30dip)
' Crea etiqueta4 (Label)
etiqueta4.Initialize("etiqueta4")
etiqueta4.TextSize = 20
etiqueta4.TextColor = Colors.Yellow
etiqueta4.Color = Colors.Red
etiqueta4.Gravity = Gravity.CENTER
etiqueta4.Text = "Apellido"
Activity.AddView(etiqueta4, 10dip, 60dip, 150dip, 30dip)
' Crea etiqueta5 (Label)
etiqueta5.Initialize("etiqueta5")
etiqueta5.TextSize = 20
etiqueta5.TextColor = Colors.Yellow
etiqueta5.Color = Colors.Red
etiqueta5.Gravity = Gravity.CENTER
etiqueta5.Text = "Hora"
Activity.AddView(etiqueta5, 10dip, 110dip, 150dip, 30dip)
' Crea Botón1 (Button)
boton1.Initialize("boton1")
boton1.TextColor = Colors.Red
boton1.Text = "Hombre"
Activity.AddView(boton1, 0dip, 200dip, 100%x, 10%y)
' Crea Botón2 (Button)
boton2.Initialize("boton2")
boton2.TextColor = Colors.Red
boton2.Text = "Mujer"
Activity.AddView(boton2, 0dip, 260dip, 100%x, 10%y)
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Pedir_informacion
' Indico con quíén queremos conectar.
In.Initialize("com.intent_servidor_hora.REQUEST","")
' In.AddCategory("android.intent.category.DEFAULT")
' Quienllama = com.intent_cliente_hora.QUIENLLAMA, para que sepa el cliente que le llama
In.PutExtra("Quienllama","com.intent_cliente_hora.QUIENLLAMA")
' Envía la mediante "quees" a hombre o mujer.
In.PutExtra("quees", persona)
StartService(In)
'''''''''''''''''''''''''
' Obtener la información
In = Activity.GetStartingIntent
If In <> Null Then
' If In.HasExtra("elnombre") Then
ToastMessageShow("Recibida respuesta", False)
etiqueta3.Text=In.GetExtra("elnombre")
etiqueta4.Text=In.GetExtra("elapellido")
etiqueta5.Text=In.GetExtra("lahora")
' End If
End If
End Sub
Sub boton1_Click
persona = "hombre"
Pedir_informacion
End Sub
Sub boton2_Click
persona = "mujer"
Pedir_informacion
End Sub
'Sub boton2_Click
' persona = "mujer"
' Dim i As Intent
' i.Initialize("", "")
' i.SetComponent("com.intent_servidor_hora" & "/.servicio_hora")
' i.AddCategory("android.intent.category.DEFAULT")
' i.PutExtra("quien", persona)
' StartService(i)
'
'End Sub
|
4.- Luego vamos a su Manifest y pegamos este código al final del texto ya existente.
Project / Manifest Editor
Project / Manifest Editor |
AddActivityText(Main,
<intent-filter>
<action android:name="com.intent_cliente_hora.QUIENLLAMA" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>)
|
Ya tenemos las dos aplicaciones.
Ejecutamos intent_servidor_hora.
Luego ejecutamos la aplicación intent_cliente_hora. Pulsamos un botón un par de veces, se enviará una petición al Servidor y se obtendrá una respuesta que será un nombre y un apellido según sea hombre o mujer. Además también se recibira la hora actual.
_____________________
- Comentarios.
Para entender el modo de funcionamiento convendría poner en la pantalla de inicio, un acceso directo a cada uno de las dos aplicaciones.
Los códigos anteriores son experimentales.
El cliente hace una petición al Servidor y además le envía su dirección (para que el servidor sepa a quién tiene que contestarle) y un dato de hombre/mujer
In.Initialize("com.intent_servidor_hora.REQUEST","") ' Con quién me quiero comunicar
In.PutExtra("Quienllama","com.intent_cliente_hora.QUIENLLAMA") ' Quién soy
In.PutExtra("quees", persona)
Cuando el cliente recibe los datos,
In = Activity.GetStartingIntent
los pone en etiquetas.
El servidor recibe una petición. Recibe dos datos:
quienllama = StartingIntent.GetExtra("Quienllama") ' Para saber quién lo ha llamado y luego saber a quién contestar.
quees = StartingIntent.GetExtra("quees") ' Qué es lo que quiere
Luego le envía los datos convenientes a quien lo ha llamado.
returnIntent.Initialize(quienllama,"")
returnIntent.PutExtra("elnombre", nombre)
returnIntent.PutExtra("elapellido", apellido)
returnIntent.PutExtra("lahora", total)
Si habilitamos...
' StopService("servicio_hora") ' Parar el Servicio
el servicio parará después de llamarlo.
____________________
3.- Otro código.
- Se trata de que el programa1 arranque y le envíe datos al programa2.
1.- Creamos un proyecto, en una nueva carpeta y lo llamamos programa1. Cuando lo compilemos y nos pida el nombre del paquete lo llamaremos com.programa1
Tendrá este contenido:
programa1 |
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean)
Dim intent1 As Intent
intent1.Initialize(intent1.ACTION_MAIN,"")
intent1.SetComponent("com.programa2/.main")
intent1.PutExtra("nombre", "Juan Antonio")
intent1.PutExtra("apellido", "Villalpando")
StartActivity(intent1)
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
|
|
Comentarios:
- Creamos un objeto intent1 para poder comunicarnos con otra aplicación.
- La aplicación con la que nos vamos a comunicar es com.programa2
- Entraremos en el Activity de com.programa2, que suele llamarse Main.
- Cuando llamemos al .main, lo debemos poner en minúsculas con un punto delante:
intent1.SetComponent("com.programa2/.main")
- Suministramos dos datos: nombre y apellido, con su correspondientes valores: "Juan Antonio" y "Villalpando", respectivamente.
- Arrancamos la actividad intent1, es decir la aplicación com.programa2.
|
2.- Luego en otra carpeta creamos otro proyecto nuevo y lo llamamos programa2. Cuando lo compilemos y nos pida el nombre del paquete lo llamaremos com.programa2
Tendrá este contenido:
programa2 |
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
End Sub
Sub Globals
Dim nombre, apellido As String
Dim Label1, Label2 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
Dim intent2 As Intent
intent2=Activity.GetStartingIntent
nombre=intent2.GetExtra("nombre")
apellido=intent2.GetExtra("apellido")
Label1.Text = nombre
Label2.Text = apellido
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
|
|
- Comentarios:
- Mediante el Designer creamos un "Layout" con un Label1 y un Label2
- Creamos un objeto intent2 para poder comunicarnos con otra aplicación.
- Cuando arranca el programa2 consulta si alquien le ha solicitado entrar en él.
- Toma los datos "nombre" y "apellidos" que le han enviado.
- Los pone en Label1 y Label2.
Se podría haber puesto como Servicio. |
__________________________________________
Bueno, con lo visto anteriormente ya tenemos una idea del funcionamiento del objeto intent.
____________________________________________________________________
¿Cómo puedo saber cómo se llama el paquete de la forma: com.miprograma?
- Vas a la pantalla de inicio de nuestro emulador SDK, pulsa el icono Dev Tools y luego en Package Browser, ahí encontrarás los paquetes instalados, sus nombres y más datos.
_____________________________________________________________
Una vez obtenida una idea sobre intent, voy a exponer una serie de ejemplos de estudio...
- Ejecutar un pdf.
En este código hemos utilizado Intent, este objeto nos comunica con otra aplicación, en nuestro caso el sistema busca qué aplicación tenemos asociada a la extensión (MIME) i.SetType("application/pdf"), y ejecuta el archivo con esa aplicación asociada. En nuestro caso esa aplicación es el visor APV pdf Visor que hemos instalado previamente en el tutorial anterior sobre pdf.
' Puedes utilizar esta parte del código o la siguiente
Dim i As Intent
i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(ruta & "/", Value)) i.SetComponent("android/com.android.internal.app.ResolverActivity")
i.SetType("application/pdf")
StartActivity(i)
' Otra forma de hacerlo
' Dim i As Intent
' i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(ruta & "/", Value))
' i.SetType("application/pdf")
' i.WrapAsIntentChooser("Elegir Visor PDF")
' StartActivity(i)
_________________________________________________________________
- ¿Cómo ver una imagen que se encuentra en la tarjeta de memoria?
- MIME. Tipo de archivo. Extensión de un archivo.
Dim Filepath As String
Filepath = File.Combine(File.DirRootExternal, "Image.jpg")
Dim i As Intent
i.Initialize(i.ACTION_VIEW, "file://" & File.Combine(File.DirRootExternal, "Image.jpg "))
i.SetType("image/*")
StartActivity (i)
Al poner i.SetType("image/*") estamos diciendo que abra cualquier tipo de imagen, de cualquier extensión, de cualquier MIME, con el programa asociado a Visor de imágenes del sistema.
Así que SetType, relaciona el tipo de archivo con el Visor por defecto que tenga el sistema para ver ese tipo de archivo.
Por ejemplo: Intent1.SetType("text/plain")
Para vídeos: Intent1.SetType( "video/*")
Para xml: Intent1.SetType( "application/vnd.ms-excel" )
Para flash: Intent1.SetType( " application/x-shockwave-flash " )
- Otros tipos MIME:
image/*
video/*
audio/*
application/pdf
application/postscript
application/zip
application/x-tar
application/msword
application/vnd.ms-excel
application/vnd.ms-powerpoint
application/vnd.oasis.opendocument.text
application/vnd.oasis.opendocument.presentation
application/vnd.oasis.opendocument.graphics
application/vnd.oasis.opendocument.image
application/vnd.oasis.opendocument.spreadsheet
application/vnd.openxmlformats-officedocument.wordprocessingml.document
application/vnd.visio
application/x-debian-package
application/vnd.android.package-archive
text/csv
text/plain
text/rtf
_____________________________________________________
- Si queremos ejecutar una aplicación específica pondremos...
Dim intent1 As Intent
intent1.Initialize(intent1.ACTION_MAIN, "")
intent1.SetComponent("com.pitagoras/.main")
StartActivity(intent1)
Cuidado con las mayúsculas y minúsculas. Main, con mayúsculas, es el nombre del Activity, en cambio en SetComponent hay que ponerlo en minúsculas .main, esto es importante y está poco documentado. Todo en minúsculas.
_______________________________________
-
Obtener las redes wifi disponibles...
Dim intent1 As Intent intent1.Initialize("android.settings.WIFI_SETTINGS", "") StartActivity(intent1)
_______________________________________
- Enviar un mensaje al Whatsapp...
Dim intent1 As Intent intent1.Initialize(intent1.ACTION_VIEW ,"") intent1.SetType("text/plain") intent1.PutExtra("android.intent.extra.TEXT", "Hola, como estás" ) intent1.SetComponent("com.whatsapp/.ContactPicker") StartActivity(intent1)
Se abre el Whatsapp y pulsa sobre un usuario, se enviará el mensaje del código.
_______________________________________
- ¿Cómo ver una trayectoria en los mapas de Google?
Hay distintas formas, como se ha tratado en un tutorial anterior, aquí la vemos con un Intent.
Dim Intent1 As Intent
ura="http://maps.google.com/maps?saddr=36.35892,-6.05781&daddr=36.756054,-6.098695" Intent1.Initialize(Intent1.ACTION_VIEW,ura)
StartActivity(Intent1)
_______________________________________
- Comunicarse con la cam.
Dim Intent1 As Intent Intent1.Initialize("android.media.action.IMAGE_CAPTURE", "")
Intent1.PutExtra("output", ParseUri("file://" & File.Combine(File.DirDefaultExternal,"imagen.jpg"))) StartActivity(Intent1)
_______________________________________
-
Leer un archivo txt
Previamente he instalado el Lector FBReader.
Luego creo en el directorio Files del proyecto, el archivo "hola.txt" con un texto en su interior.
El código copia ese archivo desde el directorio Files (DirAssets) al directorio raíz de la SD Card (DirRootExternal)
Mediante el Intent leemos ese archivo con un visor de archivos.
Podemos establecer que lo lea con un visor de archivo particular o que se muestren las aplicaciones del sistema capaz de leer nuestro archivo. Esto lo hace la orden:
Intent1.WrapAsIntentChooser("Elegir el programa que lo abre")
Intent1.WrapAsIntentChooser("Elegir el programa que lo abre") es como el "Abrir con..." de Windows, nos da a elegir el programa con el que lo queremos leer.
Dim Intent1 As Intent
Dim texto As String
File.Copy(File.DirAssets,"hola.txt",File.DirRootExternal,"hola.txt")
texto = File.Combine(File.DirRootExternal, "hola.txt")
Intent1.Initialize(Intent1.ACTION_VIEW, "")
Intent1.SetType("text/plain")
'Intent1.SetComponent("android.intent.extra.TEXT")
Intent1.PutExtra("android.intent.extra.TEXT", "file://" & texto)
Intent1.WrapAsIntentChooser("Elegir el programa que lo abre")
StartActivity(Intent1)
_______________________________________
- Llamada al calendario
Dim Intent1 As Intent
Intent1.Initialize(Intent1.ACTION_MAIN,"com.android.calendar")
Intent1.SetComponent("com.android.calendar/.LaunchActivity")
StartActivity(Intent1)
_______________________________________
- De texto a voz
Dim Intent1 As Intent
Intent1.Initialize(Intent1.ACTION_MAIN, "")
Intent1.SetComponent("com.android.settings/.TextToSpeechSettings")
StartActivity(Intent1)
_______________________________________
- A youtube
Dim Intent1 As Intent
Intent1.Initialize(Intent1.ACTION_VIEW, "")
Intent1.SetComponent("com.google.android.youtube/.ResultsActivity")
Intent1.PutExtra("query", "funny")
StartActivity(Intent1)
_______________________________________ - Buscar vídeos de "Beatles" en Youtube (Activar la librería Reflection)
Sub Activity_Create(FirstTime As Boolean) Dim intent1 As Intent intent1.Initialize("android.intent.action.SEARCH", "") SetPackage(intent1, "com.google.android.youtube") intent1.PutExtra("query", "Beatles") StartActivity(intent1) End Sub
Sub SetPackage(i As Intent, PackageName As String) Dim re As Reflector re.Target = i re.RunMethod2("setPackage", PackageName, "java.lang.String") End Sub
_______________________________________ - Conectarse a la Play de Google para bajar una aplicación.
Dim i As Intent i.Initialize(i.ACTION_VIEW, "market://details?id=jackpal.androidterm&hl=es") StartActivity(i)
_______________________________________ - Instalar y desinstalar una aplicación.
Instalar.
Dim i As Intent i.Initialize(i.ACTION_VIEW, "file:///sdcard/instalaresto.apk")
i.SetType("application/vnd.android.package-archive") StartActivity(i)
Desinstalar.
Dim i As Intent i.Initialize(i.ACTION_VIEW, "android.intent.action.DELETE", "package:com.pitagoras") StartActivity(i)
_______________________________________
- Que no aparezca el icono en la pantalla de inicio. Se realiza en el Project / Manifest Editor, agregare estas líneas...
AddReplacement(<category android:name= " android.intent.category.LAUNCHER " />, <!--<category android:name= " android.intent.category.LAUNCHER " /> -->)
SetActivityAttribute(Main, " android:excludeFromRecents " , " true " )
_______________________________________ - Insertar números secretos en el móvil o tablet.
Adaptaremos este tutorial, consulta en el tutorial 10B qué son números secretos.
http://stackoverflow.com/questions/9769166/programmatically-enter-secret-code-like-4636-on-android
Intent intent = new Intent ( Intent . ACTION_DIAL ); intent . setData ( Uri . parse ( "tel:*#*#4636#*#*" )); startActivity ( intent );
Dim i As Intent i.Initialize("android.intent.action.DIAL", "tel:" & "955555555") StartActivity(i)
Pide confirmación.
_______________________________________
Lanzar una aplicación mediante un número secreto que hemos puesto
http://www.b4x.com/android/forum/threads/dialing-service-menu-codes.23764/#post-137651
*#*#8351#*#*
_______________________________________ - Aplicación de la Play para ver números secretos.
Secret Codes
https://play.google.com/store/apps/details?id=fr.simon.marquis.secretcodes
El 7378423 mueta el Service Menu
_______________________________________
- Para ver las aplicaciones instaladas con sus intent utilizamos el Package Manager, eso ya lo vimos en tutoriales anteriores, ver el tutorial de Biblioteca Phone y OSLibrary.
< intent-filter>
<action android:name= " android.service.dreams.DreamService " />
<category android:name= " android.intent.category.DEFAULT " />
</ intent-filter>
Para que algunas aplicaciiones dejen que puedan entrar en ellas desde otra, debemos ponerle permisos en el ManifestAndroic.xml
para ello vamos al Manifest Editor y escribimos...
AddPermission(android.permission.SET_WALLPAPER)
AddReceiverText(Receiver,
<intent-filter>
<action android:name="android.SET_WALLPAPER" />
</intent-filter>)
AddActivityText(Main, < intent -filter>
<action android:name= " com.maximussoft.myprovider.REQUEST " />
<category android:name= " android.intent.category.DEFAULT " />
</ intent -filter>)
donde Receiver sería la aplicación que va a recibir la petición.
Hay una librería llamada BroadcastReceiver preparada para conectar dos aplicaciones.
También puedes encontrar información sobre Intent para conectar aplicaciones en:
foro1
foro2
foro3
foro4
Más intent
_______________________________________
- Crear un enlace directo al instalar el programa.
foro5
_______________________________________
- Consultar la dirección de las aplicaciones.
(Ver tutorial de App Inventor 2)
- Bajar de la Play Activity Starter.
________________________________
|