# Grundlegende App-Operationen

Die APIs für App-Operationen ermöglichen es Ihnen, Apps bequem zu starten und zu schließen, App-Berechtigungen zu erteilen oder zu entziehen, Apps zu deaktivieren oder zu aktivieren und **beliebige** System-Aktivitäten (Activities) wiederzugeben, einschließlich beliebiger nicht exportierter Activities.

## Installierte Apps auflisten

Ruft die Paket-IDs aller auf dem Gerät installierten Apps ab.

```python
d.enumerate_all_pkg_names()
```

```python
>>> 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']
```

## Laufende Apps auflisten

Ruft Informationen über die aktuell auf dem System laufenden Apps ab.

```python
d.enumerate_running_processes()
```

```python
>>> 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
...
```

```python
>>> result = d.enumerate_running_processes()
>>> print (result[0].processName)
com.android.launcher3
```

## App nach Namen abrufen

Verwenden Sie den gebräuchlichen Namen einer App, um eine App-Instanz zu erhalten (wenn die Paket-ID unbekannt ist).

```python
# Eingeführt in Version 7.75
app = d.get_application_by_name("WeChat")
```

## App nach Paketnamen abrufen

Verwenden Sie die Paket-ID einer App, um eine App-Instanz zu erhalten.

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

## App im Vordergrund abrufen

Ruft die Instanz der App ab, die sich aktuell im Vordergrund befindet.

```python
app = d.current_application()
```

## Geklonte App abrufen

Ruft die Instanz einer geklonten App ab (normalerweise werden geklonte Apps durch den Benutzer unterschieden und haben die UID 999).

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

## App starten

Sie können diese API aufrufen, um die App zu starten.

```python
app.start()
```

## App schließen

Sie können diese API aufrufen, um das Schließen der App zu erzwingen.

```python
app.stop()
```

## Auf Vordergrundbetrieb prüfen

Sie können diese API aufrufen, um zu überprüfen, ob die App aktuell im Vordergrund läuft.

```python
app.is_foreground()
```

## App-Informationen abrufen

Sie können diese API aufrufen, um relevante Informationen über die App, wie z.B. die Version, abzurufen.

```python
app.info()
```

```python
>>> 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"
```

```python
>>> result = app.info()
>>> print (result.processName)
'com.android.settings'
```

## Auf Installation prüfen

Sie können diese API aufrufen, um zu überprüfen, ob diese App auf dem Gerät installiert ist.

```python
app.is_installed()
```

## App deinstallieren

Sie können diese API aufrufen, um die App vom Gerät zu deinstallieren.

```python
app.uninstall()
```

## Letzte Activities abrufen

Sie können die folgende API aufrufen, um die letzten 5 Activities im System abzurufen (maximal 12). Sie können auch jede beliebige Activity direkt wiedergeben.

```python
activities = d.get_last_activities(count=5)
```

```python
>>> 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}}]
```

## App-Activity starten

Sie können systemweite Activities wiedergeben und jede Activity jeder beliebigen App aufrufen. Die verfügbaren Parameter sind wie folgt. Beachten Sie, dass die zusätzlichen Daten (extras) nur die Typen boolean, int, short, long, double, float und string unterstützen.
Die Definition des `flags`-Parameters finden Sie in der Dokumentation unter [developer.android.com/reference/android/content/Intent](https://developer.android.com/reference/android/content/Intent#FLAG_ACTIVITY_BROUGHT_TO_FRONT).

```python
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)
```

Nehmen wir nun die Rückgabe der `Letzte Activities abrufen`-API als Beispiel. Sie können die letzte System-Activity direkt mit dem folgenden Code wiedergeben.

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

Wenn Sie eine Activity in einer geklonten App aufrufen möchten, wird der folgende Code die Activity in der geklonten App wiedergeben.

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

Hier sind einige Beispiele als Referenz. Der folgende Aufruf wählt die Kundendienst-Telefonnummer 10000.

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

Der folgende Aufruf startet die Einstellungs-App für Sie, was fast dem direkten Starten der App entspricht.

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

Der folgende Aufruf öffnet die Einstellungs-App im Debug-Modus. Wenn Sie schon einmal `Waiting for debugger` gesehen haben, könnte dies für Sie nützlich sein. Natürlich muss Ihr Gerät oder Ihre App debugfähig sein. Der einzige Unterschied zum vorherigen Aufruf ist der zusätzliche `debug`-Parameter.

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

Der folgende Aufruf führt Sie direkt zur Einstellungsseite für Zertifikate.

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


## App-Berechtigungen auflisten

Diese API kann die Namen aller von der App deklarierten Berechtigungen auflisten.

```python
app.permissions()
```

```python
>>> 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-Berechtigungen erteilen

Diese API wird verwendet, um der App entsprechende Systemberechtigungen zu erteilen. Sie sollten diese API verwenden, um Berechtigungen festzulegen, bevor die App gestartet wird. Die Verwendung während die App läuft und eine Berechtigung anfordert, hat nicht den Effekt, für Sie auf 'Zulassen' zu klicken.

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

Der `mode`-Parameter der `grant`-Methode unterstützt auch `GrantType.GRANT_DENY`, was bedeutet, die Berechtigung explizit zu verweigern. Sowie `GrantType.GRANT_IGNORE`, dessen Bedeutung spezieller ist: Es erteilt der App die Berechtigung, aber die App kann diese Berechtigung tatsächlich nicht normal nutzen. Wenn eine App beispielsweise die Kamera anfordert und diese Berechtigung mit diesem Parameter verweigert wird, kann der Kamerabildschirm der App schwarz bleiben.

## App-Berechtigungen entziehen

Der Aufruf dieser API kann einer App erteilte Berechtigungen entziehen. Sie sollten dies ebenfalls vor dem Start der App tun.

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

## Prüfen, ob erteilt

Diese API wird verwendet, um zu überprüfen, ob eine bestimmte Berechtigung der App ordnungsgemäß erteilt wurde.

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

## App-Cache leeren

Diese API wird verwendet, um die Cache-Daten der App zu leeren, was die App normalerweise nicht beeinträchtigt.

```python
app.clear_cache()
```

## App-Daten löschen

Diese API wird verwendet, um die Daten der App zu löschen. Beachten Sie, dass dieser Vorgang alle Daten der App löscht und Informationen wie Konten verloren gehen.

```python
app.reset()
```

## Start-Activity abrufen

Sie können diese API verwenden, um die Start-Activity (Einstiegs-Activity) der App abzufragen.

```python
app.query_launch_activity()
```

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

## App aktivieren

Diese API wird verwendet, um eine deaktivierte App zu aktivieren. Nach der Aktivierung können Sie die App wieder normal verwenden.

```python
app.enable()
```

## App deaktivieren

Diese API wird verwendet, um eine App zu deaktivieren. Eine deaktivierte App wird nicht in der App-Liste angezeigt und kann nicht verwendet werden, es sei denn, sie wird wieder aktiviert. Diese Funktion kann eine App vorübergehend oder dauerhaft einfrieren. Die App kann nicht von selbst starten. Wenn viele Apps auf dem Gerät installiert sind, können Sie vorübergehend nicht benötigte Apps deaktivieren, um die Nutzung von Systemressourcen zu reduzieren.

```python
app.disable()
```