2016-03-31 59 views
1

Androidシステム全体でタッチイベントを送信します。バックグラウンドサービスからイベントを送信しています。私のデバイスはrootで、私のアプリケーションは/ system/appに保存されています。touchイベントを/ dev/input/eventに直接送信する方法は?

私はinstrumentation and system/bin/input tabを試しましたが、計測はアプリの外では機能しませんでした。もう1つはエラーを生成しませんが、何もしません。私は/ dev/input/event2に直接注入しようとしましたが、何の効果もありません。ここで

コードです:https://yhcting.wordpress.com/2010/11/29/linux-writing-input-event-directly/が、私はそれを正しく適用してるかどうかはわからない:

Thread t = new Thread(new Runnable() { 
    @Override 
    public void run() { 




       try { 
        Process process = Runtime.getRuntime().exec("su");//supolicy --live \"allow appdomain input_device dir { ioctl read getattr search open }\" \"allow appdomain input_device chr_file { ioctl read write getattr lock append open }\""); 
        Runtime.getRuntime().exec ("su chmod 666 /dev/input/event2"); 
        DataOutputStream os = new DataOutputStream(process.getOutputStream()); 
        String cmd = "su /dev/input/event2 ABS_X "+ xPos + " ABS_Y "+ yPos+ "\n"; 

        Runtime.getRuntime().exec(cmd); 
       } 
       catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 

     t.start(); 

私はリファレンスとして、このウェブサイトを使用していました。/dev/input/event2にどのようにイベントを注入できますか?

また、/ dev/input/eventXとは何ですか?私はいつもそれを見ていますが、それが入力ノードであるのか、それともイベントノードの一般的な表示であるのかは明確ではありません。最後に、どのイベントノード(event1、event2など)にイベントを送信すべきかをどのように知ることができますか?

EDIT:私はsuコマンドの/ dev /入力しようとした/イベント2 ABS_X XPOS ABS_Y YPOS adbのシェルを経由して、私が言って行なった:不明なユーザー名またはUIDを、それが何を意味するのでしょうか?

ありがとうございました。

答えて

1

私はあなたがシェル上で利用可能adbを持っている場合、あなたのようなコマンドでadb経由でタッチイベントを送ることができ、あなたの最初の文の第一の目的に対処するために、しかし/dev/input/event2についてあまり知らない:

# send the text "password1" into the currently selected textview 
adb shell input text password1 

# send the enter key 
adb shell input keyevent 66 

さらにinformation for touch devices can be found here。これは役に立つlist of Android KeyCodesです。

+0

おかげで多くのことを、私はwのイベントを注入するAndroidアプリ自体をしたいので、私はLinuxコマンドを探していますそれをPCに接続する必要はありませんが、これは可能ですか?または、アプリケーション内でadbコマンドを実行するライブラリがありますか? – Dania

1

"input"はアンドロイドシステムの単なるshスクリプトです。

# Script to start "input" on the device, which has a very rudimentary 
# shell. 
# 
base=/system 
export CLASSPATH=$base/framework/input.jar 
exec app_process $base/bin com.android.commands.input.Input $* 

トレース「入力」が実装されているどのようにJavaコードがここで見つけることができます:

ます。また、直接入力は/ dev /入力/タッチイベントを注入する「のSendEvent」を使用することができます

http://www.srcmap.org/sd_share/4/aba57bc6/AOSP_adb_shell_input_Code_Trace.html

EVENT0

http://ktnr74.blogspot.com/2013/06/emulating-touchscreen-interaction-with.html

+0

ありがとうございますが、デバイスが使用しているイベントノードを確認するコマンドを実行しようとしましたが、明確な出力は得られませんでした。私はruntime.getruntime.execとadbシェルの両方でそれを試みました、あなたは2番目のリンクでコマンドを実行する方法を明確にしてくださいできますか? – Dania

+0

そのコマンドを実行するときにrootであることを確認してください。 –

+1

また、タッチイベントの場合、入力偶数フィールドが100%正しいことを確認する必要があります。 (それはデバイスに依存します)私はそれを "記録された出来事"とともに使用し、それを再生します。他の賢明な、情報が間違っている可能性があります。 –

関連する問題