Presentación
- En el tutorial anterior vimos como podemos arrancar una aplicación externa desde la aplicación que hemos realizado.
- Ahora vamos a ver como podemos cerrar una aplicación externa desde nuestra aplicación. Para ello he adaptado un código que he visto en uno de los foros.
Para parar la Actividad actual utilizamos:
ExitApplication o Activity.Finish desde la misma Actividad.
otra manera es ir al shell en modo root y poner kill -p IDentificador
Una aplicación del Google Play para ver los procesos y controlarlos es Elixir.
_________________________
1.- Pero lo que realmente queremos es Terminar un proceso desde otro proceso.
En este caso vamos a obtener una lista de los procesos que se están ejecutando y tener la posibilidad de terminar con alguno.
Para ello vamos a instalar la Librería OSLibrary
Crearemos una nueva aplicación.
Entramos en el Designer y Añadimos un ListView1 y un Button1. Guardamos el Designer como: Layout
El ListView1 ocupa gran parte de la pantalla y el Button1 tiene el texto: "Recargar la lista de procesos".
Y copiamos y pegamos este código...
Listar las aplicaciones en funcionamiento y Elegir una para Terminarla |
'Activity module
Sub Process_Globals
' Juan Antonio Villalpando
' juana1991@yahoo.com
End Sub
Sub Globals
Dim Button1 As Button
Dim ListView1 As ListView
Dim lstname,lstpid, lstnamepid, lstret As List
Dim OS As OperatingSystem
End Sub
Sub Activity_Create(FirstTime As Boolean)
Activity.LoadLayout("Layout")
OS.Initialize("OS")
lstname.Initialize
lstpid.Initialize
lstnamepid.Initialize
lstret=OS.RunningAppProcessInfo(lstname,lstpid,lstnamepid)
For i = 0 To lstname.Size - 1
ListView1.AddSingleLine(lstname.Get(i))
' Con estas líneas si estuviera abierto el Browser se terminaría automaticamente.
' If lstname.Get(i) = "com.android.browser" Then
' OS.killBackgroundProcesses(lstname.Get(i))
' OS.killProcess(lstpid.Get(i))
' Msgbox ("Kill process: " & lstname.Get(i),lstpid.Get(i))
' End If
Next
End Sub
Sub Activity_Resume
End Sub
Sub Activity_Pause (UserClosed As Boolean)
End Sub
Sub Button1_Click
OS.Initialize("OS")
lstname.Initialize
lstpid.Initialize
lstnamepid.Initialize
lstret=OS.RunningAppProcessInfo(lstname,lstpid,lstnamepid)
ListView1.Clear
For i = 0 To lstname.Size - 1
ListView1.AddSingleLine(lstname.Get(i))
Next
' Esto termina con esta misma aplicación
' OS.killProcess(OS.myPid)
End Sub
Sub ListView1_ItemClick (Position As Int, Value As Object)
Msgbox ("Va a terminar el proceso: " & lstname.Get(Position),"PID = " & lstpid.Get(Position))
OS.killBackgroundProcesses(lstname.Get(Position))
OS.killProcess(lstpid.Get(Position))
End Sub
|
El código es fácil de entender. Cuando arranca se carga el ListView1 con los procesos que se están ejecutando.
Se toma el nombre de cada proceso (lstname) y se introduce en las distintas filas del ListView1.
También se toma el PID (lstpid) de cada proceso y se introduce en una lista.
Si pulsamos sobre un elemento del ListVew1, se terminará ese proceso:
OS.killProcess(lstpid.Get(Position))
Si pulsamos el Button1, se recargarán los procesos actuales y el ListView1.
Si activamos estas estas líneas:
' Con estas líneas si estuviera abierto el Browser se terminaría automaticamente.
' If lstname.Get(i) = "com.android.browser" Then
' OS.killBackgroundProcesses(lstname.Get(i))
' OS.killProcess(lstpid.Get(i))
' Msgbox ("Kill process: " & lstname.Get(i),lstpid.Get(i))
' End If
Se podría terminar con un proceso, en este caso el Browser, automáticamente cuando cargara nuestro programa.
_________________________
2.- Instalar / Desinstalar una aplicación desde código
Instalar
Dim applicacionapk as string
Dim i as intent
TargetApk = File.DirRootExternal & "/AppUpdate.apk"
i.Initialize(i.ACTION_VIEW, applicacionapk)
i.SetComponent("com.android.packageinstaller/.Paqueteainstalar")
StartActivity(i)
Otra forma de instalar
Dim i As Intent
i.Initialize(i.ACTION_VIEW, "file:///sdcard/MyAPK.apk" )
i.SetType( "application/vnd.android.package-archive" )
StartActivity (i)
---------------------------------------------------
Desinstalar
Dim i As Intent
i.Initialize("android.intent.action.DELETE", "package:com.example.app")
StartActivity(i)
_________________________
Librería OSLibrary
Esta biblioteca es bastante potente, podemos actuar mediante ella en el Sistema Operativo.
Aquí pongo un enlace que vale la pena echarle un vistazo.
http://www.basic4ppc.com/android/help/oslibrary.html#operatingsystem_killprocess