Próbuję zaimplementować usługę metody wprowadzania, która odbiera intencje wysyłane przez klienta zdalnego, aw odpowiedzi na te wysyła odpowiedni KeyEvent.Jak wysłać KeyEvents poprzez usługę metody wprowadzania do okna dialogowego lub menu pokrętła?
używam w input method service
tej metody
private void keyDownUp(int keyEventCode)
{
getCurrentInputConnection().sendKeyEvent(
new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode));
getCurrentInputConnection().sendKeyEvent(
new KeyEvent(KeyEvent.ACTION_UP, keyEventCode));
}
wysłać KeyEvents
jak w Simple Sofykeyboard Sample
, a ona pracuje w domu, w Activities.
.. ale to nie działa, gdy Dialog lub menu Prządki jest na pierwszym planie.
Zdarzenia wysyłane są na numer parent activity behind the Dialog
.
Czy istnieje sposób przesyłania kluczy i sterowania urządzeniem, np. Za pomocą klawiszy sprzętowych metody wprowadzania?
lepsze wyjaśnienie tego, co próbuję zrobić:
ja niby writng metodę wprowadzania, który pozwala sterować urządzeniem z pilota.
Piszę w kliencie (aplikacja Java na moim komputerze stacjonarnym) polecenie (na przykład "UP"), serwer na urządzeniu z sendBroadcast()
wysyła intencję z informacją, a odbiornik w metodzie wprowadzania pobiera i wywołuje keyDownUp z keycode
z DPAD_UP key.
Zasadniczo działa, ale kiedy idę do aplikacji, która pokazuje okno dialogowe, metoda keyDownUp
nie wysyła kluczowego zdarzenia do dialog
, na przykład aby wybrać tak lub nie przyciski, ale nadal kontroluje activty
za Dialog
.
Here znalazłem kogoś z mojego sam problem ... ale nie ma odpowiedzi ...
Zmieniłem moje pytanie, próbując wyjaśnić, jaki jest mój problem. W twoim przykładzie po otwarciu okna dialogowego w aplikacji sms, jeśli wyślę polecenie DOWN dla klucza DPAD_DOWN, nie spowoduje to przewinięcia okna na pierwszym planie, ale zostanie wysłane do działania za nim, które pokazuje listę wiadomości, wybierając wiadomość pod tą, którą długo naciskałem, uniemożliwiając zamknięcie okna. Próbowałem zadzwonić naKeyDown i onKeyUp, ale nie działają one ani tam, gdzie działało keyDownUp. – shutdown11
Funkcja getCurrentInputConnection() zawsze zwraca połączenie z działaniem, które pokazuje dialog, a nigdy z dialogiem. Używając twardych klawiszy, możesz przewijać okno dialogowe, gdy jest ono skupione, więc zastanawiałem się, jak emulować twardy klucz. – shutdown11
Twardy klucz można z pewnością symulować za pomocą klasy Instrumentation, ale wymaga on zrootowanego urządzenia. –