Dışarıdan bir kaynaktan girdi alan bir BroadcastReceiver var.Aynı String girdisinden beklenmeyen farklı sonuçlar
Bu alıcı daha sonra bir "fare benzeri" programı olarak davranması ve sisteme giriş işlemlerini göndermelidir. Kök erişim ve izinlerim var.
Benim sorunum bir String gibi "input tap 275 410"
gönderdikleri zaman bile Ancak örneğin "input" + " tap" + " 275" + " 410"
, hala çalışıyor dize ...
bölünmüş eğer dize olarak monte zaman, program, doğru davranır olmasıdır istenen: ayıklama, tüm izlenen Strings aynı olsa
"input " + CursorSystem.command + " " + coords[0] + " " + coords[1]
Sonra hiçbir şey ... olmuyor (eksi konum):
value = {char[26]@830031306976} 0 = 'i' 105 1 = 'n' 110 2 = 'p' 112 3 = 'u' 117 4 = 't' 116 5 = ' ' 32 6 = 't' 116 7 = 'a' 97 8 = 'p' 112 9 = ' ' 32 10 = '2' 50 11 = '7' 55 12 = '5' 53 13 = ' ' 32 14 = '4' 52 15 = '1' 49 16 = '0' 48 17 = '\u0000' 0 18 = '\u0000' 0 19 = '\u0000' 0 20 = '\u0000' 0 21 = '\u0000' 0 22 = '\u0000' 0 23 = '\u0000' 0 24 = '\u0000' 0 25 = '\u0000' 0
Sonuçların etkili olmaması nedeniyle, bir rehberlik veya özellik incelemek istiyorum. Anlayabildiğim kadarıyla, bu bir izin meselesi değildir, ne de bir iplik meselesi değildir, çünkü Loglar izin talebini (ve hibe) gösterir, çünkü İp Alıcının yürütüldüğü süre boyunca yaşar (o zaman bir süre [30+ saniye])
sonra öldürülmeden, çok uzun süre Receiver.onReceive hata ayıklamak:
public void onReceive(Context context, Intent intent) {
String command = intent.getStringExtra("command");
String touch = intent.getStringExtra("touch");
if (Executor.isRootAvailable()) {
Executor executor = new Executor();
ArrayList<String> commands = new ArrayList<>();
if (command != null) {
if (command.length() > 0) {
if (commands.add("input " + command)) {
executor.execute(commands);
}
}
} else if (touch != null) {
if (CursorSystem.isAlive) { // Always true for the executions
CursorSystem.doInput();
if (CursorSystem.state == CursorSystem.STATE) { // Always true for the executions
int[] coords = CursorSystem.coordinates;
if (coords != null) {
// This line is where (I guess) that the problem lies.
// CursorSystem.command is "tap", coords[0] and coords[1] is the result of (a view).getLocationOnScreen(coordinates)
// It results in a 2 positions int array with (x, y) coordinates, these values are always correct.
if (commands.add("input " + CursorSystem.command + " " + coords[0] + " " + coords[1])) {
executor.execute(commands);
CursorSystem.doInput();
} else {
// error...
}
} else {
// error...
}
} else {
// error...
}
} else {
error...
}
} else {
error...
}
} else {
error...
}
}
Sorun kullanıcıyı destekliExecutor.execute:
CursorSystem
kullanılan ImageViews ne etkileşim istenen edildi "hedef" olarak olmasıydı bulundu
:
"Executor.execute" ifadenizde, her zaman değişmediğiniz için her zaman yanlış olan "resp" değerini döndürürsünüz. Nasıl olması gerekiyordu? –
Ayrıca, CursorSystem sınıfının tam olarak ne olduğunu ve "value" satırını biçimlendirebileceğini de belirtebilir misiniz? Sanırım 'CursorSystem' kendi sınıfınız.Tam kodunu görmek faydalı olacaktır. –
@AkashAggarwal Evet, temel olarak kod şu anda bir inceleme karmaşası olduğu için. Kod sonuçta 'return (suProcessRetval! = 255)' e ulaşacak, bu da doğru olarak değerlendirilecek ... Ayrıca, 'CursorSystem' sınıfında iki bin satırdan fazla kod var. Kullanılan temel değişkenler her zaman ayarlanmış (en azından hiç bir zaman), 'CursorSystem.isAlive 'her zaman' true 'olarak hata ayıklanır, gösterilen diğer kodların çoğu aslında farklıdır ve soru için sadeleştirilmiştir. Aynı zamanda, hiçbir LogCat hatası görünmez, 'İstisnalar atılmaz, hata yok .... ve yanıt yok. – Bonatti