基礎應用程式操作¶
應用程式操作相關的介面可讓您方便地啟動、關閉應用程式,以及授予或撤銷應用程式的權限、停用或啟用應用程式,以及重播任意系統活動 (Activity),包括任意未匯出的活動等功能。
列出已安裝的應用程式¶
取得裝置上所有已安裝應用程式的 package ID。
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']
列出正在執行的應用程式¶
取得系統上目前正在執行的應用程式相關資訊。
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
透過名稱取得應用程式¶
使用應用程式的常用名稱來取得應用程式實例(不清楚 Package ID)。
# 7.75 版本引入
app = d.get_application_by_name("微信")
透過套件名稱取得應用程式¶
使用應用程式的 Package ID 來取得應用程式實例。
app = d.application("com.tencent.mm")
取得前景應用程式¶
取得目前正在前景執行的應用程式實例。
app = d.current_application()
取得多開應用程式¶
取得多開應用程式的實例(通常情況下,多開應用程式透過 user 區分並且 UID 為 999)。
app = d.application("com.my.app", user=999)
啟動應用程式¶
您可以呼叫此介面來啟動 APP。
app.start()
關閉應用程式¶
您可以呼叫此介面來強制關閉此 APP。
app.stop()
檢查是否在前景執行¶
您可以呼叫此介面來檢查應用程式目前是否正在前景執行。
app.is_foreground()
取得應用程式資訊¶
您可以呼叫此介面取得應用程式的相關資訊,如版本等。
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'
檢查是否已安裝¶
您可以呼叫此介面來檢查此應用程式是否已經安裝在裝置上。
app.is_installed()
解除安裝應用程式¶
您可以呼叫此介面來從裝置上解除安裝該應用程式。
app.uninstall()
取得最近的活動¶
您可以呼叫以下介面取得系統中最近的 5 條活動(最多 12 條),您也可以直接重播任意一條活動。
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}}]
發起應用程式活動¶
您可以重播系統級 Activity,可以啟動任意應用程式的任意 Activity。其可用參數如下,您需要注意,附加資料 (extras) 僅支援 boolean、int、short、long、double、float 以及 string 類型。 flags 參數的定義請參考文件 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)
現在我們以 取得最近的活動 介面的回傳為例,您可以直接透過如下程式碼重播最後一條系統 Activity。
activity = d.get_last_activities(count=5)[-1]
d.start_activity(**activity)
如果您要啟動多開應用程式,如下程式碼會將 Activity 重播至多開應用程式。
d.start_activity(**activity, user=999)
下面給您一些範例供您參考,以下呼叫會撥打 10000 客服電話。
d.start_activity(action="android.intent.action.CALL", data="tel:10000")
以下呼叫,會為您啟動 Settings 應用程式,這幾乎等同於直接啟動應用程式。
d.start_activity(action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER", component="com.android.settings/.Settings")
以下呼叫,會以偵錯模式開啟設定應用程式,如果您看過 Waitting for debugger,那麼它可能對您有用。當然,您的裝置或 APP 必須是可偵錯的,它和上面的呼叫區別僅在於多了一個 debug 參數。
d.start_activity(action="android.intent.action.MAIN", category="android.intent.category.LAUNCHER", component="com.android.settings/.Settings", debug=True)
以下呼叫,會為您直接跳轉至憑證設定頁面。
d.start_activity(action="com.android.settings.TRUSTED_CREDENTIALS")
列出應用程式權限¶
此介面可以列出應用程式所有宣告的權限名稱。
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']
授予應用程式權限¶
此介面用於授予應用程式對應的系統權限,您應在 APP 未啟動時使用此介面進行權限設定,在 APP 執行並請求權限時使用並不會產生幫您點擊允許的效果。
from lamda.const import *
app.grant(PERMISSION_READ_PHONE_STATE, mode=GrantType.GRANT_ALLOW)
其中 grant 方法的 mode 參數,還支援 GrantType.GRANT_DENY,意思為明確拒絕該權限。以及 GrantType.GRANT_IGNORE,GRANT_IGNORE 的意義較為特殊,其代表授予應用程式該權限,但應用程式實際上無法正常使用此權限,例如,如果應用程式請求相機權限,使用此參數拒絕後,應用程式的相機可能會出現黑畫面。
撤銷應用程式權限¶
呼叫此介面可以撤銷授予應用程式的權限,您同樣應該在應用程式啟動前進行呼叫。
from lamda.const import *
app.revoke(PERMISSION_READ_PHONE_STATE)
檢查是否已授予¶
此介面用於檢查某項權限是否已經正常授予應用程式。
from lamda.const import *
app.is_permission_granted(PERMISSION_READ_PHONE_STATE)
清除應用程式快取¶
此介面用於清除應用程式的快取資料,通常不會對應用程式造成影響。
app.clear_cache()
清除應用程式資料¶
此介面用於清除應用程式的資料,注意此操作會清空應用程式所有資料,應用程式的資訊如帳號等將會遺失。
app.reset()
取得入口活動¶
您可以透過此介面查詢該應用程式的啟動 Activity (入口活動)。
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']}
啟用應用程式¶
此介面用於啟用被停用的應用程式,啟用後您仍然可以正常使用應用程式。
app.enable()
停用應用程式¶
此介面用於停用應用程式,被停用的應用程式將不會在應用程式清單中顯示,您也無法使用除非被啟用。該功能可為您暫時或徹底地凍結應用程式,該應用程式無法自動啟動,在裝置上安裝的應用程式較多時,您可以適當停用暫時不需要使用的 APP 以減少系統資源的使用。
app.disable()