|     Inicio    |   |         |  |   FOROS      |  |      |      
   Elastix - VoIP B4A (Basic4Android) App inventor 2 PHP - MySQL
  Estación meteorológica B4J (Basic4Java) ADB Shell - Android Arduino
  AutoIt (Programación) Visual Basic Script (VBS) FireBase (BD autoactualizable) NodeMCU como Arduino
  Teleco - Emisora de A.M. Visual Basic Cosas de Windows Webs interesantes
T Búsqueda en este sitio:


.

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") 
DimAs 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.

________________________________

- Mi correo:
juana1991@yahoo.com
- KIO4.COM - Política de cookies. Textos e imágenes propiedad del autor:
© Juan A. Villalpando
No se permite la copia de información ni imágenes.
Usamos cookies propias y de terceros que entre otras cosas recogen datos sobre sus hábitos de navegación y realizan análisis de uso de nuestro sitio.
Si continúa navegando consideramos que acepta su uso. Acepto    Más información