Responsable d'activité entre autres choses, gérer Épinglage de l'écran . Vous pouvez invoquer le am
pour épingler une application sans tenir compte de l'épinglage de l'écran qui est activé sous Paramètres .
Sachez toutefois que l'épinglage ne sera pas entièrement automatisé de cette manière, c'est-à-dire que vous devrez toujours confirmer à l'écran si vous souhaitez épingler l'application ou non, bien que j'aie prévu un moyen d'interagir avec l'écran uniquement la toute première fois.
Google a mentionné aquí :
(C'est moi qui souligne)
Si l'application requérante n'est pas propriétaire du dispositif, l'utilisateur est invité à confirmer son identité. . Une application propriétaire d'un appareil peut appeler le setLockTaskPackages()
pour permettre aux applications d'être épinglées sans l'étape de confirmation de l'utilisateur.
Notez également que une application ne peut pas devenir propriétaire d'un dispositif simplement en utilisant un ensemble de commandes, à moins qu'elle ne remplisse les critères qui lui ont été fixés, c'est-à-dire qu'elle doit être candidate à l'administration d'un dispositif (les applications que vous voyez dans la rubrique Paramètres → Sécurité → Administrateurs de périphériques ), qui est codé en dur dans le manifeste de l'application. Google a mentionné aquí ce qui doit être inclus dans le manifeste d'une application pour utiliser l'API Administration des dispositifs.
Même dans ce cas, vous devez toujours faire de l'application la Propriétaire du dispositif -- un type spécialisé d'administrateur d'appareil qui, une fois activé, ne peut pas être désactivé à moins d'avoir un accès Root ou d'effectuer une restauration d'usine sur l'appareil. Contrairement au mode kiosque simple que vous activez en épinglant une application dans la liste des tâches récentes, une application propriétaire de l'appareil peut rendre extrêmement difficile l'évasion du mode kiosque, ce qui signifie que la technique d'évasion normale, comme le fait de maintenir enfoncé le bouton Aperçu ou le bouton Retour, ou les deux, peut être rendue inutile.
C'est à vous de choisir une méthode pour faire de votre application préférée le propriétaire de l'appareil.
Ce n'était qu'une mise en contexte pour expliquer pourquoi vous devez interagir avec l'écran, et pourquoi il n'existe pas de méthode complète en ligne de commande pour épingler une application à l'écran.
Activités à faire
Configuration adb Connectez le téléphone au PC, activer le débogage USB dans le téléphone, lancez l'application que vous souhaitez utiliser pour le screen pin, lancez un shell sur le PC, et entrez :
NOTE : Il m'a été signalé que dans Android 6.0 lock-task
a été remplacé par task lock
. Par conséquent, effectuez les changements appropriés dans toute commande avant d'utiliser la dernière.
-
adb shell
task_id=$(dumpsys activity | grep -A2 "(dumpsys activity recents)"| grep '#'| cut -d ' ' -f 7| cut -c 2-); am lock-task $task_id
-
Comme alternative : Cette commande fonctionne si l'application est lancée depuis le début, c'est-à-dire si elle n'est pas reprise de la liste des tâches récentes :
adb shell
cur_act=($(dumpsys activity | grep mFocusedActivity | rev)); task_id=$(echo ${cur_act[0]} | head -c -2 | cut -c 2-| rev); am lock-task $task_id;
Vous obtiendrez une sortie Activity manager is not in lockTaskMode
. Ignorez-le, et si vous avez lu les liens que j'ai mentionnés dans le contexte, vous sauriez pourquoi il a été édité.
Tapez Début sur l'écran de l'appareil pour confirmer l'épinglage de l'écran.
(Cliquez sur l'image pour l'agrandir)
![Confirm positively IMG: Confirmation]()
J'ai téléchargé l'enregistrement de l'écran aquí (5.62MB size) qui vous montre que la commande peut aussi épingler l'application du lanceur.
Au lieu d'aller à l'écran et d'appuyer sur la boîte de dialogue de confirmation, vous pouvez utiliser l'une des approches suivantes :
-
Émettez des événements de touche pour descendre, aller à droite et simuler l'entrée dans la boîte de dialogue de confirmation.
adb shell input keyevent 20
adb shell input keyevent 22
adb shell input keyevent 66
( <a href="https://stackoverflow.com/questions/7789826/adb-shell-input-events">Ici </a>sont énumérés quelques événements clés courants)
-
-
Activer Emplacement du pointeur sous Options du développeur, épinglez une application et maintenez la touche Début dans la boîte de dialogue de confirmation, et repérez les coordonnées X et Y.
-
Vous pouvez également utiliser adb shell getevent -l
pour obtenir les coordonnées X et Y. Voici une bonne solution par Tomas.
Une fois que vous les avez, utilisez cette commande :
adb shell input touchscreen tap <x> <y>
où <x>
y <y>
sont les coordonnées respectives que vous avez notées.
Étant donné que les coordonnées X et Y seront toujours les mêmes à chaque fois que la confirmation sera affichée (à condition que vous n'essayiez pas d'utiliser les coordonnées du mode paysage sur le mode portrait), vous pouvez l'utiliser pour l'épinglage complet de l'écran en utilisant la ligne de commande.
Pour ce qui est de la commande qui permet d'épingler l'écran, c'est très simple. La partie responsable de l'activation de l'épinglage de l'écran est am lock-task
et son utilisation est la suivante :
Type adb shell am
et remarquez cette ligne :
am lock-task: bring <TASK_ID> to the front and don't allow other tasks to run
Apportez <TASK_ID>
(qui est l'ID de la tâche d'une application en cours d'utilisation) à l'avant tout en ne permettant pas à d'autres tâches de s'exécuter signifie simplement le mode kiosque.
Je n'ai pas réussi à savoir ce que sont STACK_ID et TASK_ID en général, mais je sais comment les trouver. Utilisez l'une des approches suivantes pour obtenir le TASK_ID de l'application en cours ou lancée par un utilisateur :
-
dumpsys activity | grep -A20 "(dumpsys activity recents)"
ou saisissez dumpsys activity recents
pour une sortie détaillée de toutes les activités récentes, mais ce serait excessif pour notre objectif. La sortie du premier serait comme :
* Recent #0: TaskRecord{68f58f6 #1441 A=com.slovoed.oald U=0 sz=1}
* Recent #1: TaskRecord{9888887 #1415 A=com.cyanogenmod.trebuchet U=0 sz=1}
* Recent #2: TaskRecord{29c6fe30 #1438 A=com.icecoldapps.serversultimatepro U=0 sz=2}
La valeur numérique avant A=
et après #
est le TASK_ID de l'application. Dans l'exemple, ce serait : 1441
, 1415
, 1438
. Ces TASK_ID se retrouveraient dans la sortie de la commande suivante.
-
am stack list
Il s'agit d'une liste de toutes les piles d'activités dont TASK_ID fait partie.
Stack id=1 bounds=[0,0][1080,1920] displayId=0
taskId=1438: com.icecoldapps.serversultimatepro/com.icecoldapps.serversultimatepro.viewStart1
taskId=1441: com.slovoed.oald/com.slovoed.oald.SlovoEdTabActivity
Stack id=0 bounds=[0,0][1080,1920] displayId=0
taskId=1415: com.cyanogenmod.trebuchet/com.android.launcher3.Launcher
-
dumpsys activity | grep mFocusedActivity
Il indique le nom du paquet de l'application qui est au centre de l'attention (c'est-à-dire l'application qui s'affiche de manière dominante sur l'écran), l'ID de sa tâche et d'autres détails :
mFocusedActivity: ActivityRecord{30672d7f u0 com.slovoed.oald/.OALDTabActivity t1441}
La valeur après t
et avant }
est le TASK_ID de l'application.
-
Vous pouvez également obtenir TASK_ID à partir de :
Il existe peut-être d'autres moyens, mais ceux que j'ai mentionnés devraient suffire.
A la vôtre !