フォアグラウンド サービスに設定されているサービスからタッチ イベントを挿入したい (通知バーに通知を保持する)。デバイスがルート化されており、アプリがシステム アプリとして設定されています。プロセスを追跡するために、開発者向けオプションからタッチ ジェスチャを表示するようにデバイスを設定しました。2 つの問題があります。
インジェクション コードを呼び出すと、タッチ ジェスチャがデバイスに表示されないことがあります。これは、タッチ イベントがインジェクトされていないことを意味します。
タッチが行われ、画面にジェスチャが表示されると、シミュレートされたタッチによって発生するはずのアクションが実行される場合と実行されない場合があります。prs(タッチによって加えられる圧力)の値は、タッチがシミュレートされている場合は0ですが、通常の指のタッチによるprsは0より大きいことに気付きました。シミュレートされた場合、prsは> 0である必要があるようですアクションを実行するためにタッチします。
なぜこれが起こるのかわかりません。サービス内のインジェクション コードは次のとおりです。
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 }\"");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
String cmd = "/system/bin/input tap " + xPos + " " + yPos +"\n";
Runtime.getRuntime().exec(cmd);
// Toast toast = Toast.makeText(getApplicationContext(), "***INJECTION DONE ***", Toast.LENGTH_LONG);
// toast.show();
} catch (IOException e) {
// Toast toast = Toast.makeText(getApplicationContext(), "INJECTION ERROR !", Toast.LENGTH_LONG);
// toast.show();
e.printStackTrace();
// Log.e(" ", e.getStackTrace().toString());
}
}
});
t.start();
どうすればこの問題を解決できますか? どんな助けでも大歓迎です。