Je cherche à obtenir un service d'accessibilité simple, comme Voice Access de Google ou Button Mapper, pour fonctionner sur un LG Exalt LTE, exécutant une version allégée de Marshmallow. Le système manque de nombreux composants d'interface utilisateur, y compris les paramètres d'accessibilité système, généralement utilisés pour activer ou désactiver les services d'accessibilité. J'aimerais savoir s'il est possible de compenser le manque d'interface utilisateur avec ADB. J'ai essayé ce qui suit :
a été accordé adb shell pm grant package.name.here android.permission.WRITE_SECURE_SETTINGS
J'ai même donné android.permission.WRITE_SECURE_SETTINGS
même s'il n'est pas déclaré dans la liste des autorisations en haut du manifeste. J'obtiens cette erreur :
Operation not allowed: java.lang.SecurityException: Package package.name.here has not requested permission android.permission.BIND_ACCESSIBILITY_SERVICE
Cependant, il est déclaré dans le manifeste ici :
et c'est là que le problème se pose. Il s'agit du service lui-même, et il requiert une autorisation qui ne concerne pas tout le package, BIND_ACCESSIBILITY_SERVICE
. Si je le lance avec ADB de cette manière adb shell am startservice -n package.name.here/a.i
Je reçois une erreur Error: Requires permission android.permission.BIND_ACCESSIBILITY_SERVICE
même si j'ai déjà accordé l'autorisation au package. J'ai même essayé adb shell settings put secure enabled_accessibility_services package.name.here/.a.i
, mais je reçois toujours la même erreur.
En conclusion :
Comment puis-je démarrer un service et accorder des autorisations à ce service avec ADB? Pour être clair. Je sais déjà que je peux utiliser adb shell pm grant
pour accorder une autorisation à l'ensemble du package, mais dans ce cas, il s'agit d'une autorisation qui n'est pas requise par l'ensemble du package, mais qui est déclarée dans un composant spécifique et je suis perdu quant à la façon de lancer le composant avec les autorisations requises via ADB.
0 votes
Évidemment, j'ai utilisé le véritable nom du package à la place de package.name.here... lol
0 votes
BIND_ACCESSIBILITY_SERVICE est une autorisation avec un niveau de protection de signature, ce qui signifie qu'elle ne peut pas être accordée à l'aide de
pm
comme les autorisations avec un niveau de protection dangereux. Mais elle peut être accordée aux packages qui la demandent en utilisant:appops set BIND_ACCESSIBILITY_SERVICE allow
. Si seul un composant (service) la demande, ce que vous avez mentionné devrait fonctionner:settings put secure enabled_accessibility_services /:/:...
. C'est ce qui se passe lorsque vous autorisez des applications à partir des paramètres de l'interface graphique.0 votes
Essayez de tuer le processus de l'application après avoir accordé la permission. De plus, à ma connaissance, le service doit être exporté dans le Manifest pour le lancer à partir d'ADB ou par d'autres applications.
0 votes
@IrfanLatif voici la sortie de la cmd :
$ adb shell am kill flar2.homebutton $ adb shell appops set flar2.homebutton BIND_ACCESSIBILITY_SERVICE allow Erreur : Chaîne d'opération inconnue : BIND_ACCESSIBILITY_SERVICE $ adb shell settings put secure enabled_accessibility_services flar2.homebutton/a.i $ adb shell am startservice -n flar2.homebutton/a.i Démarrage du service : Intent { cmp=flar2.homebutton/a.i } Erreur : Nécessite l'autorisation android.permission.BIND_ACCESSIBILITY_SERVICE