Aller au contenu

Tâche Launch App

Résumé

  • Nom interne : LaunchApp
  • Catégorie : Package Manager
  • Objectif : Lancer une application installée sur l'appareil à partir de son nom de package, via son activité de lancement par défaut.
  • Type de tâche : Normale

Compatibilité

  • Version AndroMate minimale : 1.1.0

  • Version AndroMate maximale : 1.1.0

  • Android minimum : Android 13 (API 33)

  • Android testé maximum : Android 16 (API 36)

  • Permissions requises : QUERY_ALL_PACKAGES, SYSTEM_ALERT_WINDOW (recommandée)


Description détaillée

La tâche Launch App démarre une application en résolvant son activité de lancement par défaut via PackageManager.getLaunchIntentForPackage() et en appelant startActivity() avec le flag FLAG_ACTIVITY_NEW_TASK (requis lors d'un lancement depuis un contexte de service).

Note sur le lancement en arrière-plan : Depuis Android 10 (API 29), une application en arrière-plan ne peut pas démarrer d'activités (restrictions Background Activity Launch). AndroMate s'exécute en tant que service de premier plan ; pour lancer d'autres applications de manière fiable, il s'appuie sur le service d'accessibilité et la permission Affichage par-dessus les autres applications (SYSTEM_ALERT_WINDOW), qui l'exemptent tous deux des restrictions BAL.

Si le package n'est pas installé ou n'a pas d'activité lançable, la tâche lève PACKAGE-MANAGER-ERROR-001.


Paramètres d'entrée

Paramètre Type Requis Valeurs possibles / Règles Compatibilité Android Compatibilité AndroMate Défaut
package_name String Oui Nom de package Android valide (com.example.app) Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 ""

Paramètres de sortie

La tâche Launch App ne retourne pas de données. Son objectif est d'effectuer une action système.


Exceptions

Code Condition de déclenchement
PACKAGE-MANAGER-ERROR-001 Le package n'est pas installé, ou n'a pas d'activité lançable (MAIN/LAUNCHER)

Diagramme d'exécution

flowchart TD
    Start([▶ LaunchApp]) --> Resolve[🔧 Résolution package_name]

    Resolve --> GetIntent[📦 getLaunchIntentForPackage]

    GetIntent --> HasIntent{Intent de lancement\ntrouvé ?}

    HasIntent -->|Non| Throw([❌ PACKAGE-MANAGER-ERROR-001])
    HasIntent -->|Oui| AddFlag[🚩 Ajout FLAG_ACTIVITY_NEW_TASK]

    AddFlag --> StartActivity[▶ startActivity]

    StartActivity --> Success([✅ VoidResult])

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Throw fill:#ffcdd2
    style GetIntent fill:#fff9c4
    style StartActivity fill:#f3e5f5

Fonctionnement :

  1. Résolution : le package_name est résolu avec le contexte AndroMate
  2. Récupération de l'intent : getLaunchIntentForPackage() résout l'activité de lancement par défaut de l'app
  3. Vérification : si aucun intent n'est retourné, la tâche lève PACKAGE-MANAGER-ERROR-001
  4. Lancement : FLAG_ACTIVITY_NEW_TASK est ajouté et startActivity() est appelé
  5. Résultat : retourne VoidResult

Exemples de code

Exemple 1 — Lancer WhatsApp

{
  "LaunchApp": [
    {
      "id": "1",
      "title": "Ouvrir WhatsApp",
      "package_name": "com.whatsapp"
    }
  ]
}

Détail des paramètres d'entrée

package_name — Package cible

L'identifiant de package Android de l'app à lancer.

  • Doit être un nom de package valide et installé (ex. com.whatsapp)
  • Supporte l'interpolation de variables (ex. $target_pkg, ${PKG})
  • L'app doit exposer une activité lançable (catégorie LAUNCHER, action MAIN)
  • Si aucun intent de lancement ne peut être résolu, la tâche lève PACKAGE-MANAGER-ERROR-001

Détail des paramètres de sortie

Cette tâche ne produit aucune variable de sortie. Elle effectue une action système (démarrage de l'app cible) et retourne un VoidResult en cas de succès.


Exemple JSON complet

{
  "LaunchApp": [
    {
      "id": "1",
      "title": "Launch App",
      "package_name": "com.instagram.android"
    }
  ]
}