Aller au contenu

Demander la permission de projection

Résumé

  • Nom interne : AskProjectionPermission
  • Catégorie : Media Projection
  • Objectif : Demander (ou réutiliser) la permission Android MediaProjection nécessaire pour capturer l'écran de l'appareil, et démarrer le service de streaming d'écran en arrière-plan.
  • Type de tâche : Normale

Compatibilité

  • Version minimale AndroMate : 1.1.0

  • Version maximale AndroMate : 1.1.0

  • Android minimum : Android 13 (API 33)

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

  • Constructeurs supportés :

    • ✅ Tous les constructeurs
  • Permissions requises :

    • Consentement MediaProjection accordé par l'utilisateur (boîte de dialogue système) — ce n'est pas une permission de manifest, mais une invite runtime unique par session d'application

Description détaillée

La tâche Demander la permission de projection obtient la permission système de capture d'écran (MediaProjection) et démarre le service de streaming d'écran qui garde une capture live disponible pour les tâches suivantes — notamment ocr_task, qui lit le texte sur la dernière capture de la projection.

Exécutez cette tâche une seule fois, avant toute tâche ocr_task dans le workflow. Si la permission a déjà été accordée plus tôt dans la même session d'application, la tâche la réutilise immédiatement sans redemander.


Paramètres d'entrée

Paramètre Type Obligatoire Valeurs possibles Compatibilité Android Compatibilité AndroMate Défaut
timeout_ms Integer Non Millisecondes à attendre la réponse de l'utilisateur à la boîte de dialogue Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 5000

Paramètres de sortie

La tâche Demander la permission de projection ne produit aucune sortie. Elle prépare uniquement le service de streaming d'écran pour les tâches suivantes (ex. ocr_task).


Exceptions

Code Nom de l'exception Description
MEDIA-PROJ-001 Permission de projection refusée L'utilisateur a fermé ou refusé la boîte de dialogue système MediaProjection.

Diagramme d'exécution

flowchart TD
    Start([▶ AskProjectionPermission]) --> Check{Permission déjà\naccordée cette session ?}
    Check -->|Oui| Info[ℹ️ Log : déjà accordée]
    Check -->|Non| Prompt[📲 Afficher la boîte de dialogue MediaProjection]
    Prompt --> Wait{Réponse utilisateur\ndans timeout_ms ?}
    Wait -->|Accordée| StartStream[🔴 Démarrer le service de streaming]
    Wait -->|Annulée/Refusée| E1[❌ MEDIA-PROJ-001\nPERMISSION_REFUSED]
    Info --> Success([✅ VoidResult])
    StartStream --> Success
    E1 --> Error([❌ Exception])

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Error fill:#ffcdd2
    style E1 fill:#ffcdd2

Comment ça fonctionne :

  1. Vérifier la permission existante : si MediaProjection a déjà été accordée plus tôt dans cette session, passe directement au succès.
  2. Demander : sinon, affiche la boîte de dialogue système de consentement MediaProjection.
  3. Attendre : bloque jusqu'à la réponse de l'utilisateur ou l'expiration de timeout_ms.
  4. Démarrer le streaming : à l'accord, démarre le service de streaming d'écran en arrière-plan que les tâches suivantes (ocr_task) utiliseront.
  5. Refus : si l'utilisateur annule/refuse, lève MEDIA-PROJ-001.

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

1. Paramètre d'entrée : timeout_ms

Durée d'attente de la réponse utilisateur à la boîte de dialogue, en millisecondes.

Exemple

"timeout_ms": 10000

Détails

  • Optionnel — vaut 5000 (5 secondes) par défaut si omis.
  • Non résolu comme une $variable — lu comme un entier littéral depuis le JSON.

Exemple JSON complet

{
  "AskProjectionPermission": [
    {
      "id": "1",
      "timeout_ms": 8000
    }
  ]
}