B4A en español - Juan Antonio Villalpando
(BASIC4Android)
-- Tutorial de B4A --
Volver al índice del tutorial
____________________________
87.- Librería Reflection.
Esta librería está destinada sobre todo a expertos en programación y conocedores de Java. Aquí voy a tratar de explicar someramente de qué trata.
Reflection.
Tutorial
El sistema operativo Android contiene una serie de archivos llamados API. Dentro de ellos se encuentran trozos de códigos llamado Classes que a su vez contienen otros códigos como pueden ser Campos o Métodos.
En esta web podemos consultar los APIs disponibles:
http://developer.android.com/reference/android/os/MemoryFile.html
En la web anterior nos situamos en el API de la versión 19, android.os (se denomina Package) (Listado de Packages)
En ese Package nos situamos en la Classes Process. (Los Packages contienen miembros que pueden ser Classes, Interfaces, Exceptions)
Es decir, estamos en android.os.Process
Dentro de Process podemos ir al Method myPid que nos dará el número PID de nuestra aplicación.
Arriba izquierda del gráfico anterior observamos que estos código pertenecen a la API level 19, dependiendo del level, puede cambiar la llamada a los códigos.
También es necesario saber que para que funcionen eficientemente algunos de los códigos debemos modificar el archivo AndroidManifest.xml, poníéndo permisos:
<uses-permission android:name="android.permission.DEVICE_POWER"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
o bien con el Manifest Editor:
AddPermission(android.permission.DEVICE_POWER)
AddPermission(android.permission.WAKE_LOCK)
Vamos a ver un ejemplo en Basic4Android.
- Activamos la librería Refletion.
Código |
Sub Process_Globals
End Sub
Sub Globals
End Sub
Sub Activity_Create(FirstTime As Boolean) Dim r As Reflector Log(r.RunStaticMethod("android.os.Process", "myPid", Null,Null ))
End Sub
|
En el Logs aparecerá el número de PID de nuestra aplicación, es este caso el 2401
Nuestra aplicación ha llamado al Paquete android.os, a su miembro Process y a su Method myPid.
____________________________________________
- Otro Código.
Código |
Sub Process_Globals
End Sub
Sub Globals
Dim Label1 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("layout")
Dim r As Reflector
Dim pid As Int
Log(r.RunStaticMethod("android.os.Process", "myPid", Null,Null ))
Log(r.RunStaticMethod("android.os.Environment", "getExternalStorageState", Null,Null ))
Log(r.RunStaticMethod("android.os.Environment", "getExternalStorageDirectory", Null,Null ))
Log(r.RunStaticMethod("android.os.Environment", "getDataDirectory", Null,Null ))
Log(r.RunStaticMethod("android.os.Environment", "getRootDirectory", Null,Null ))
End Sub
|
2.- Enlace a una web.
Código |
Sub Process_Globals
' http://developer.android.com/reference/android/text/util/Linkify.html
End Sub
Sub Globals
Dim Label1 As Label
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("layout")
Dim r As Reflector
Label1.Text = "http://www.elmundo.es""
r.Target = r.CreateObject("android.text.util.Linkify")
Dim argumento(2) As Object
Dim tipo(2) As String
argumento(0) = Label1
tipo(0) = "android.widget.TextView"
argumento(1) = 1
tipo(1) = "java.lang.int"
r.RunMethod4("addLinks", argumento, tipo)
End Sub
|
También podemos llamar a otras códigos de aplicaciones que tengamos instadas, ver foro.
http://www.b4x.com/android/forum/threads/reflection-library-how-to-call-b4a-subs.24855/#content
____________________________________________
En el trabajo con esta librería aparecerán conceptos como...
CreateObject
oPI = R.CreateObject("android.app.ActivityManager$RunningAppProcessInfo")
r1.Target =r1.CreateObject ( "android.hardware.Camera.AutoFocusCallback")
GetActivity
GetActivityBA
GetField
GetMethod
SetField
GetPublicField
GetStaticField
SetPublicField
RunMethod
RunStaticMethod
RunPublicMethod
Target
________________________________
|