View Single Post
Staro 21.03.2017., 00:20   #16
De5tr0yer
Avocado
Moj komp
 
De5tr0yer's Avatar
 
Datum registracije: Aug 2005
Lokacija: Zagreb
Postovi: 7,797
Citiraj:
Autor kasko Pregled postova
Ok, kuzim sto zelis postici, iskreno se nadam da ce ti to i uspijeti tako kako si zamislio da zelis. Neovisno o tome, fora bi bilo imati i BT modul opcenito tako u vozilu za druge korisnike ili tvoj mobitel.
Ideja i jest da se ostavi slobodan BT na tabletu za ostale namjene koje podrazumijevaju i ovo gore. Inače ima brdo već isprogramiranih rješenja/appova koji komuniciraju preko BT-a s RPijem ili IOIO boardovima. Ideja je bila, ako postoji USB IBUS adapter, zašto ne direktno/žično?

-------

Good news:
Konačno sam našao način(e) kako bilo koju tipku simulirati, rješenje je prilično trivijalno, ali zahtijeva lower level access u vidu SU, dakle nije opcija za one bez rootanog uređaja:

Java (majka kraljica) runtime.exec. Strašno jednostavno:

Code:
try {
    String keyCode = "input keyevent " + KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE;
    Runtime runtime = Runtime.getRuntime();
    Process proc = runtime.exec(new String[] { "su", "-c", keyCode });
}
catch (IOException e){
    e.printStackTrace();
}
SAUCE

Nakon izvođenja naredbe do obavljanja akcije postoji zadrška od otprilike 200ms, primjetan je taj mali delay, pa se eventualno može riješiti drugim načinom, ali još ga nisam isprobao, čitaj ispod.

--

Drugi način, no koliko čitam, google je onemogućio autocomplete funkciju za interne/privatne klase poput IBinderService i IWindowManagera, pa se moraju skinuti sa primjerice android git-a.

Ovakav pristup zahtijeva system level pristup, tj. opet SU/root, tj. app bi se morao instalirati u /system/ kako bi se dobio INJECT_EVENTS permission: SAUCE

Moram isprobati brzinu izvođenja ovakve naredbe.

------

Inače je samo za mediacontrols najlakše ovako preko AudioManagera riješiti:

Code:
AudioManager audio = (AudioManager) getSystemService(AUDIO_SERVICE);

audio.adjustVolume(AudioManager.ADJUST_RAISE, AudioManager.FLAG_SHOW_UI);

audio.dispatchMediaKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_MEDIA_FAST_FORWARD));

---

Sljedeće tražim kako aktivirati globalnu "OK, Google" naredbu, tj. koja će reagirati ili kao na homepageu ili još bolje u svakoj aplikaciji koja je trenutno aktivna posebno. Primjerice ako imam otvorenu app Maps, da mi onda naredbu šalje u Maps, ne u google now. Ideje?
__________________
Spoiler alert!

Zadnje izmijenjeno od: De5tr0yer. 21.03.2017. u 00:27.
De5tr0yer je offline   Reply With Quote