2011-08-10 15 views
1

次のコードスニペットを使用して、sendeventコマンドのバッチを実行して、エミュレータ上の座標44,129をクリックしようとしました。しかし、それは結果を示していません。しかし、もし私がシェルプロンプトに同じバッチのコマンドを与えていれば、上記の座標をうまくクリックすることができます。アンドロイドコードでsendeventシェルコマンドを実行できません

のString [] cmmandemulatorarr = { "/システム/ binに/のSendEventは/ dev /入力/ EVENT0 3 0 44"、 "/システム/ binに/のSendEventは/ dev /入力/ EVENT0 3 1 129"、 「/システム/ bin/sendevent/dev/input/event0 1 330 1 "、 "/system/bin/sendevent/dev/input/event0 0 0 0 "、 "/system/bin/sendevent/dev/input/event0 330 0 "、 "/system/bin/sendevent/dev/input/event0 0 0 0 "、};

  for (int i = 0; i < cmmandemulatorarr.length; i++) { 

     Process process = 
     Runtime.getRuntime().exec(cmmandemulatorarr[i]); 


     BufferedReader reader = new BufferedReader(
     new InputStreamReader(process.getInputStream())); 
     int read; 
     char[] buffer = new char[4096]; 
     StringBuffer output = new StringBuffer(); 
     while ((read = reader.read(buffer)) > 0) { 
     output.append(buffer, 0, read); 
     } 
     reader.close(); 
     } 

    } catch (IOException e) { 

     throw new RuntimeException(e); 

    } 

ここに紛失しているものがあるか、コードを介していくつかの座標でクリックイベントを取得するために何か他のものを試す必要があります。

注::コマンドが正常に実行されたように見えるコードを実行している間、ログに例外はありません。

よろしく PINU

答えて

1

しかし、それはすべての結果を示していません。

これは良いことです。

しかし、シェルプロンプトに同じバッチのコマンドを与えても、上記の座標をうまくクリックすることができます。

シェルはルートレベルの権限で実行されます。あなたのデバイスをルートし、あなたのコードをそのように実行することを手配しない限り、あなたのSDKアプリケーションはそうではありません。

すべてのデバイスに/system/bin/sendeventコマンドが含まれているわけではなく、いつでも削除できます。これはAndroid SDKの一部ではありません。

私は、コードを介していくつかの座標でクリックイベントを取得するために別のものを試す必要があります。

これは、明らかなセキュリティ上の理由から、通常のデバイス用のAndroid SDKでは不可能です。

+0

しかし、私はルートレベルの特権を持っているエミュレータを試しています。また、画面の一部で自動クリックを実装する方法はありますか? – pinu

+0

"しかし、私はrootレベル特権を持っているエミュレータを試しています" - SDKアプリケーションは、エミュレータ上でさえ、ルートレベルの特権を持っていません。 「幸いなことに、画面の一部に自動クリックを実装する方法はありますか? – CommonsWare

関連する問題