2010-10-29 25 views
2

Je travaille sur un port Synergy sur Android (voir synergy-foss.org). Le seul moyen que j'ai trouvé pour injecter des frappes est d'utiliser le Cyanogen Mod et d'écrire des frappes sur/dev/uinput. Cependant, mon application n'a pas les autorisations pour écrire dans/dev/uinput. La seule façon de contourner ce problème est de chmod 777/dev/uinput.Cyanogen/dev/uinput injection de clé

Cependant ... il semble qu'après quelque temps les permissions sur/dev/uinput sont réinitialisées - par quoi? Je ne sais pas.

Existe-t-il un meilleur moyen ou existe-t-il un moyen d'exécuter votre application en tant que root dans le mod Cyanogen?

Merci

+0

Hors sujet: avez-vous un site de projet pour votre port? Je serais intéressé à garder un oeil sur ça. –

+0

https://sourceforge.net/projects/synergyandroid/ – Shaun

Répondre

0

Hmm Je pense qu'il est aussi simple que

Process p = Runtime.getRuntime().exec("su"); 
+0

Non, ce n'est pas si simple, du moins si vous avez l'intention d'accomplir quoi que ce soit en tant que root. su n'augmente pas le privilège du processus en cours, il crée un nouveau processus (par défaut, shell) en tant qu'utilisateur différent (root par défaut). Vous allez devoir dire ce que vous voulez qu'il fasse, soit en le lançant avec des arguments en ligne de commande, soit en obtenant son stdin et en y injectant des frappes. –

+0

Correct. Je devais faire le su et puis chmod/dev/uniput du flux de sortie – Shaun

+0

Le problème avec cela est, ne laissez-vous jamais une application pour le faire maintenant? –

0

Regardez IWindowManager. injectKeyEvent. Il est dans le layoutlib.jar dans la plate-forme SDK. Je ne suis pas sûr de quelles autorisations l'application aura besoin de l'appeler (comme root ou pas) mais c'est un début. Je ne pense pas que vous aurez besoin de root pour exécuter la méthode. Je jouais avec un peu de temps et je pouvais injecter des frappes sur mon clavier d'ordinateur et que l'appareil "répète" l'action.

+0

Je crois que IWindowManager vous permet seulement d'injecter des frappes dans votre propre application. J'ai besoin d'injecter des touches (et j'espère que les mouvements de la souris) dans toutes les applications – Shaun

+0

mon application fonctionne sur Windows et envoie des données via une connexion tcp à un thread en cours d'exécution sur le périphérique. Il injecte les événements de clavier dans n'importe quelle application en cours d'exécution. –

+0

Intéressant. J'ai été amené à croire - à partir de ce post: http://mylifewithandroid.blogspot.com/2009/01/generating-keypresses-programmatically.html - que cela a fonctionné uniquement sur votre application. La source est-elle disponible quelque part? – Shaun