Operaciones básicas de la aplicación

Las interfaces relacionadas con las operaciones de la aplicación le permiten iniciar y cerrar aplicaciones convenientemente, así como otorgar o revocar permisos de la aplicación, deshabilitar o habilitar aplicaciones, y reproducir cualquier actividad del sistema (Activity), incluyendo cualquier actividad no exportada, entre otras funciones.

Listar aplicaciones instaladas

Obtiene el ID de paquete (package ID) de todas las aplicaciones instaladas en el dispositivo.

d.enumerate_all_pkg_names()
>>> d.enumerate_all_pkg_names()
['com.android.calendar', 'com.android.camera2', 'com.android.contacts', 'com.android.deskclock', 'com.android.dialer', 'com.android.gallery3d', 'com.android.messaging', 'com.android.settings', 'com.android.vending', 'com.android.documentsui', 'com.android.quicksearchbox', 'com.google.android.googlequicksearchbox']

Listar aplicaciones en ejecución

Obtiene información sobre las aplicaciones que se están ejecutando actualmente en el sistema.

d.enumerate_running_processes()
>>> d.enumerate_running_processes()
[packages: "com.android.launcher3"
processName: "com.android.launcher3"
uid: 10101
pid: 2333
, packages: "com.google.android.gms"
processName: "com.google.android.gms.persistent"
uid: 10075
pid: 2702
...
>>> result = d.enumerate_running_processes()
>>> print (result[0].processName)
com.android.launcher3

Obtener aplicación por nombre

Usa el nombre común de la aplicación para obtener una instancia de la aplicación (cuando no se conoce el Package ID).

# Introducido en la versión 7.75
app = d.get_application_by_name("微信")

Obtener aplicación por nombre de paquete

Usa el Package ID de la aplicación para obtener una instancia de la aplicación.

app = d.application("com.tencent.mm")

Obtener aplicación en primer plano

Obtiene la instancia de la aplicación que se está ejecutando actualmente en primer plano.

app = d.current_application()

Obtener aplicación de instancia múltiple

Obtiene la instancia de una aplicación de instancia múltiple (generalmente, las aplicaciones de instancia múltiple se distinguen por el usuario y tienen un UID de 999).

app = d.application("com.my.app", user=999)

Iniciar aplicación

Puede llamar a esta interfaz para iniciar la aplicación.

app.start()

Cerrar aplicación

Puede llamar a esta interfaz para forzar el cierre de esta aplicación.

app.stop()

Comprobar si está en primer plano

Puede llamar a esta interfaz para comprobar si la aplicación se está ejecutando actualmente en primer plano.

app.is_foreground()

Obtener información de la aplicación

Puede llamar a esta interfaz para obtener información relevante de la aplicación, como la versión, etc.

app.info()
>>> app.info()
packageName: "com.android.settings"
uid: 1000
enabled: true
processName: "com.android.settings"
sourceDir: "/system/product/priv-app/Settings/Settings.apk"
dataDir: "/data/user_de/0/com.android.settings"
firstInstallTime: 1230739200000
lastUpdateTime: 1230768000000
versionCode: 1276
versionName: "10"
>>> result = app.info()
>>> print (result.processName)
'com.android.settings'

Comprobar si está instalada

Puede llamar a esta interfaz para comprobar si esta aplicación ya está instalada en el dispositivo.

app.is_installed()

Desinstalar aplicación

Puede llamar a esta interfaz para desinstalar la aplicación del dispositivo.

app.uninstall()

Obtener actividades recientes

Puede llamar a la siguiente interfaz para obtener las 5 actividades más recientes del sistema (hasta un máximo de 12), y también puede reproducir directamente cualquiera de ellas.

activities = d.get_last_activities(count=5)
>>> d.get_last_activities(count=5)
[{'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}, {'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}, {'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}, {'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}, {'action': 'android.intent.action.MAIN', 'category': 'android.intent.category.HOME', 'component': 'net.oneplus.launcher/.Launcher', 'extras': {'android.intent.extra.FROM_HOME_KEY': True}}]

Iniciar una actividad de la aplicación

Puede reproducir una Activity a nivel de sistema, lo que le permite invocar cualquier Activity de cualquier aplicación. Los parámetros disponibles son los siguientes. Tenga en cuenta que los datos adicionales (extras) solo admiten los tipos boolean, int, short, long, double, float y string. Para la definición del parámetro flags, consulte la documentación en developer.android.com/reference/android/content/Intent.

from lamda.const import *
d.start_activity(action="*", category="*", component="*", extras={"boolean": False, "int": 1, "string": "abc", "float": 1.123}, flags=FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLEAR_TASK, data="*", debug=False)

Ahora, tomando como ejemplo el resultado de la interfaz Obtener actividades recientes, puede reproducir directamente la última Activity del sistema con el siguiente código.

activity = d.get_last_activities(count=5)[-1]
d.start_activity(**activity)

Si desea invocar una aplicación de instancia múltiple, el siguiente código reproducirá la Activity en la aplicación de instancia múltiple.

d.start_activity(**activity, user=999)

A continuación se presentan algunos ejemplos para su referencia. La siguiente llamada marcará al número de servicio al cliente 10000.

d.start_activity(action="android.intent.action.CALL", data="tel:10000")

La siguiente llamada iniciará la aplicación de Ajustes (Settings), lo cual es casi equivalente a iniciar la aplicación directamente.

d.start_activity(action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER", component="com.android.settings/.Settings")

La siguiente llamada abrirá la aplicación de Ajustes en modo de depuración. Si alguna vez ha visto el mensaje Waitting for debugger, esto podría serle útil. Por supuesto, su dispositivo o la aplicación deben ser depurables. La única diferencia con la llamada anterior es la adición del parámetro debug.

d.start_activity(action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER", component="com.android.settings/.Settings", debug=True)

La siguiente llamada le llevará directamente a la página de configuración de certificados.

d.start_activity(action="com.android.settings.TRUSTED_CREDENTIALS")

Listar permisos de la aplicación

Esta interfaz puede listar los nombres de todos los permisos declarados por la aplicación.

app.permissions()
>>> app.permissions( )
['android.permission.REQUEST_NETWORK_SCORES', 'android.permission.WRITE_MEDIA_STORAGE', 'android.permission.WRITE_EXTERNAL_STORAGE', 'android.permission.READ_EXTERNAL_STORAGE', 'android.permission.WRITE_SETTINGS', 'android.permission.WRITE_SECURE_SETTINGS', 'android.permission.DEVICE_POWER', 'android.permission.CHANGE_CONFIGURATION', 'android.permission.MOUNT_UNMOUNT_FILESYSTEMS', 'android.permission.VIBRATE', 'android.permission.BLUETOOTH', 'android.permission.BLUETOOTH_ADMIN', 'android.permission.BLUETOOTH_PRIVILEGED', 'android.permission.ACCESS_COARSE_LOCATION', 'android.permission.NFC', 'android.permission.HARDWARE_TEST', 'android.permission.CALL_PHONE', 'android.permission.MODIFY_AUDIO_SETTINGS', 'android.permission.MASTER_CLEAR', 'com.google.android.googleapps.permission.GOOGLE_AUTH', 'android.permission.ACCESS_DOWNLOAD_MANAGER', 'android.permission.READ_CONTACTS', 'android.permission.WRITE_CONTACTS', 'android.permission.ACCESS_NETWORK_STATE', 'android.permission.LOCAL_MAC_ADDRESS', 'android.permission.ACCESS_WIMAX_STATE', 'android.permission.CHANGE_WIMAX_STATE', 'android.permission.ACCESS_WIFI_STATE', 'com.android.certinstaller.INSTALL_AS_USER', 'android.permission.CHANGE_WIFI_STATE', 'android.permission.TETHER_PRIVILEGED', 'android.permission.FOREGROUND_SERVICE', 'android.permission.INTERNET', 'android.permission.CLEAR_APP_USER_DATA', 'android.permission.READ_PHONE_STATE', 'android.permission.MODIFY_PHONE_STATE', 'android.permission.ACCESS_FINE_LOCATION', 'android.permission.WRITE_APN_SETTINGS', 'android.permission.ACCESS_CHECKIN_PROPERTIES', 'android.permission.READ_USER_DICTIONARY', 'android.permission.WRITE_USER_DICTIONARY', 'android.permission.FORCE_STOP_PACKAGES', 'android.permission.PACKAGE_USAGE_STATS', 'android.permission.BATTERY_STATS', 'com.android.launcher.permission.READ_SETTINGS', 'com.android.launcher.permission.WRITE_SETTINGS', 'android.permission.MOVE_PACKAGE', 'android.permission.USE_CREDENTIALS', 'android.permission.BACKUP', 'android.permission.READ_SYNC_STATS', 'android.permission.READ_SYNC_SETTINGS', 'android.permission.WRITE_SYNC_SETTINGS', 'android.permission.READ_DEVICE_CONFIG', 'android.permission.STATUS_BAR', 'android.permission.MANAGE_USB', 'android.permission.MANAGE_DEBUGGING', 'android.permission.SET_POINTER_SPEED', 'android.permission.SET_KEYBOARD_LAYOUT', 'android.permission.INTERACT_ACROSS_USERS_FULL', 'android.permission.COPY_PROTECTED_DATA', 'android.permission.MANAGE_USERS', 'android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS', 'android.permission.READ_PROFILE', 'android.permission.CONFIGURE_WIFI_DISPLAY', 'android.permission.CONFIGURE_DISPLAY_COLOR_MODE', 'android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS', 'android.permission.SET_TIME', 'android.permission.ACCESS_NOTIFICATIONS', 'android.permission.REBOOT', 'android.permission.RECEIVE_BOOT_COMPLETED', 'android.permission.MANAGE_DEVICE_ADMINS', 'android.permission.READ_SEARCH_INDEXABLES', 'android.permission.BIND_SETTINGS_SUGGESTIONS_SERVICE', 'android.permission.OEM_UNLOCK_STATE', 'android.permission.MANAGE_USER_OEM_UNLOCK_STATE', 'android.permission.OVERRIDE_WIFI_CONFIG', 'android.permission.USE_FINGERPRINT', 'android.permission.MANAGE_FINGERPRINT', 'android.permission.USE_BIOMETRIC', 'android.permission.USE_BIOMETRIC_INTERNAL', 'android.permission.USER_ACTIVITY', 'android.permission.CHANGE_APP_IDLE_STATE', 'android.permission.PEERS_MAC_ADDRESS', 'android.permission.MANAGE_NOTIFICATIONS', 'android.permission.DELETE_PACKAGES', 'android.permission.REQUEST_DELETE_PACKAGES', 'android.permission.MANAGE_APP_OPS_RESTRICTIONS', 'android.permission.MANAGE_APP_OPS_MODES', 'android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS', 'android.permission.READ_PRINT_SERVICES', 'android.permission.NETWORK_SETTINGS', 'android.permission.TEST_BLACKLISTED_PASSWORD', 'android.permission.USE_RESERVED_DISK', 'android.permission.MANAGE_SCOPED_ACCESS_DIRECTORY_PERMISSIONS', 'android.permission.CAMERA', 'android.permission.MEDIA_CONTENT_CONTROL', 'com.wapi.permission.ACCESS_CERTIFICATE', 'com.oneplus.faceunlock.permission.FACE_SETTING', 'android.permission.STATUS_BAR_SERVICE', 'android.permission.MODIFY_AUDIO_ROUTING', 'com.oneplus.account.READ_ACCOUNT_INFO', 'com.android.settings.SEND_PERMISSION']

Otorgar permisos a la aplicación

Esta interfaz se utiliza para otorgar los permisos de sistema correspondientes a una aplicación. Debe usar esta interfaz para configurar los permisos antes de que la aplicación se inicie. Usarla mientras la aplicación está solicitando permisos en tiempo de ejecución no tendrá el efecto de hacer clic en "Permitir" por usted.

from lamda.const import *
app.grant(PERMISSION_READ_PHONE_STATE, mode=GrantType.GRANT_ALLOW)

El parámetro mode del método grant también admite GrantType.GRANT_DENY, que significa denegar explícitamente el permiso, y GrantType.GRANT_IGNORE. El significado de GRANT_IGNORE es algo especial: representa que se otorga el permiso a la aplicación, pero en la práctica, la aplicación no puede usarlo correctamente. Por ejemplo, si una aplicación solicita acceso a la cámara y se utiliza este parámetro para denegarlo, la cámara de la aplicación podría mostrar una pantalla negra.

Revocar permisos de la aplicación

Llamar a esta interfaz puede revocar los permisos otorgados a la aplicación. De manera similar, debe llamarla antes de que la aplicación se inicie.

from lamda.const import *
app.revoke(PERMISSION_READ_PHONE_STATE)

Comprobar si está otorgado

Esta interfaz se utiliza para comprobar si un permiso específico ha sido otorgado correctamente a la aplicación.

from lamda.const import *
app.is_permission_granted(PERMISSION_READ_PHONE_STATE)

Limpiar caché de la aplicación

Esta interfaz se utiliza para limpiar los datos de caché de la aplicación, lo que generalmente no afecta a la aplicación.

app.clear_cache()

Limpiar datos de la aplicación

Esta interfaz se utiliza para limpiar los datos de la aplicación. Tenga en cuenta que esta operación borrará todos los datos de la aplicación, y la información como cuentas, etc., se perderá.

app.reset()

Obtener actividad de entrada

Puede utilizar esta interfaz para consultar la Activity de inicio de la aplicación (actividad de entrada).

app.query_launch_activity()
>>> app.query_launch_activity()
{'action': 'android.intent.action.MAIN', 'component': 'com.android.settings/com.android.settings.Settings', 'categories': ['android.intent.category.LAUNCHER']}

Habilitar aplicación

Esta interfaz se utiliza para habilitar una aplicación que ha sido deshabilitada. Después de habilitarla, podrá usar la aplicación normalmente.

app.enable()

Deshabilitar aplicación

Esta interfaz se utiliza para deshabilitar una aplicación. Una aplicación deshabilitada no se mostrará en la lista de aplicaciones y no podrá usarla a menos que se habilite. Esta función le permite congelar aplicaciones de forma temporal o permanente. La aplicación no podrá iniciarse automáticamente. Cuando tenga muchas aplicaciones instaladas en su dispositivo, puede deshabilitar adecuadamente las aplicaciones que no necesita temporalmente para reducir el uso de recursos del sistema.

app.disable()