应用相关操作

列出已安装的应用

获取设备上所有已安装应用的 package ID。

d.enumerate_all_pkg_names()

列出正在运行的应用

获取系统上当前正在运行的应用相关信息。

d.enumerate_running_processes()

根据应用的名称获取应用

使用应用的常用名来获取应用实例(不清楚 Package ID)。

# 7.75 版本引入
d.get_application_by_name("微信")
d.get_application_by_name("设置")

根据应用ID获取应用

使用应用的 Package ID 来获取应用实例。

d.application("com.tencent.mm")
d.application("com.android.settings")

获取处于前台的应用

获取当前正在前台运行的应用实例。

d.current_application()
# 等价于
d.application(d.current_application().applicationId)
# 获取当前前台的 activity
d.current_application().activity

多开应用

获取多开应用的实例(通常情况下,多开应用通过 user 区分并且UID为999)。

# 多开应用通常运行于 999 用户名下
d.application("com.my.app", user=999)

发起或获取应用活动

发起系统 Activity,或者获取系统中最近启动的 Activity。

# 导入 FLAG_ACTIVITY* 常量定义
from lamda.const import *

# 获取系统中最近的5条活动(最多12条)
activities = d.get_last_activities(count=5)
print (activities)

# 你可以直接重放最后一条活动(注意并不是所有活动都可以重放)
activity = activities[-1]
print (activity)
d.start_activity(**activity)

# 指定启动多开应用的活动
d.start_activity(**activity, user=999)

# 手动组装 activity 信息
# 附加数据只支持 boolean, int, short, long, double, float 以及 string 类型
d.start_activity(action="***", category="***", component="***",
                 extras={"boolean": False, "int": 1, "string": "act", "float": 1.123},
                 flags=FLAG_ACTIVITY_NEW_TASK|FLAG_ACTIVITY_CLEAR_TASK,
                 data="***", debug=False)

# flags 的定义请参考文档
# https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_BROUGHT_TO_FRONT
# flags 以及 debug 参数不是必须的,只是多了一种可能

# 拨打 10000 客服电话
d.start_activity(action="android.intent.action.CALL", data="tel:10000")

# debug 参数代表:是否以调试模式启动该活动
# 如果你知道 Waitting for debugger,那么它可能对你有用
# 你可以像下面这样以调试模式启动一个应用(你的设备或者APP需要是可调试的)
la = d.application("com.android.settings").query_launch_activity()
d.start_activity(**la, debug=True)

# 例如:启动 设置 APP(当然这几乎等价于直接启动app)
d.start_activity(action="android.intent.action.MAIN",
                 category="android.intent.category.LAUNCHER",
                 component="com.android.settings/.Settings")

# 例如:进入证书设置
d.start_activity(action="com.android.settings.TRUSTED_CREDENTIALS")

授予撤销权限

撤销或者授予应用的相关权限(如相册读取等权限)。

# 注意,你应在APP未启动时进行权限设置,在APP请求权限时调用并不会产生帮你点击允许的效果。
app = d.application("com.my.app")

#导入 PERMISSION_READ_PHONE_STATE 常量(版本>3.90)
from lamda.const import *

# 获取应用所有权限
app.permissions()
# 授予 READ_PHONE_STATE 权限
app.grant(PERMISSION_READ_PHONE_STATE, mode=GrantType.GRANT_ALLOW)
# 拒绝 READ_PHONE_STATE 权限
app.grant(PERMISSION_READ_PHONE_STATE, mode=GrantType.GRANT_DENY)
# 检查是否已授予权限
app.is_permission_granted(PERMISSION_READ_PHONE_STATE)
# 撤销已授予的权限
app.revoke(PERMISSION_READ_PHONE_STATE)

清除缓存及重置

清除应用的缓存信息,或者清空应用的数据(重置)。

# 删除应用的缓存数据
app = d.application("com.my.app")
app.delete_cache()
# 重置应用数据
app.reset_data()

启动停止应用

启动或者停止相关应用。

app = d.application("com.my.app")

# 启动应用
app.start()
# 检查应用是否正在前台运行
app.is_foreground()
# 关闭应用
app.stop()

其他相关方法

获取应用信息、卸载、禁用应用等相关方法。

app = d.application("com.my.app")
# 获取应用信息
app.info()

# 检查应用是否已安装
app.is_installed()
# 卸载应用
app.uninstall()

# 查询该应用的启动 Activity(入口活动)
app.query_launch_activity()

# 启用应用
app.enable()
# 禁用应用
app.disable()