onKeyEvent & Zugänglichkeit Service
Mein Benutzer werden mithilfe von TalkBack aktiviert oder irgendeiner anderen Zugänglichen Service. Ich würde gerne erfassen die onKeyEvent Veranstaltungen in unserer App, aber das Ereignis wird ausgelöst, um die Zugänglichkeit Dienste aktiviert. Ich habe das folgende einfache Zugänglichkeit den Service.
public class Accessibility_Service extends AccessibilityService {
private String TAG = Accessibility_Service.class.getSimpleName();
@Override
public boolean onKeyEvent(KeyEvent event) {
int action = event.getAction();
int keyCode = event.getKeyCode();
if (action == KeyEvent.ACTION_UP) {
if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
Log.d("Hello", "KeyUp");
} else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
Log.d("Hello", "KeyDown");
}
return true;
} else {
return super.onKeyEvent(event);
}
}
/**
* Passes information to AccessibilityServiceInfo.
*/
@Override
public void onServiceConnected() {
Log.v(TAG, "on Service Connected");
AccessibilityServiceInfo info = new AccessibilityServiceInfo();
info.packageNames = new String[] { "com.camacc" };
info.eventTypes = AccessibilityEvent.TYPES_ALL_MASK;
info.notificationTimeout = 100;
info.feedbackType = AccessibilityServiceInfo.FEEDBACK_SPOKEN;
setServiceInfo(info);
}//end onServiceConnected
/**
* Called on an interrupt.
*/
@Override
public void onInterrupt() {
Log.v(TAG, "***** onInterrupt");
}//end onInterrupt
@Override
public void onAccessibilityEvent(AccessibilityEvent event) {
//TODO Auto-generated method stub
}
}//end Accessibility_Service class
Wenn ich den logcat erhalte ich keine Antwort. Ist es möglich, zu konsumieren, die Volume Down-und Up-Ereignisse vor TalkBack oder andere Zugänglichkeit Dienste?
Danke.
EDIT:
HINZUGEFÜGT, DIE FOLGENDE KENNZEICHEN NOCH OHNE GLÜCK:
info.flags = AccessibilityServiceInfo.FLAG_REQUEST_FILTER_KEY_EVENTS;
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, konfigurieren Sie die Erreichbarkeit Dienst, wie dies in der xml-Ressource, wenn Sie weitere Informationen benötigen, suchen diese: https://developer.android.com/guide/topics/ui/accessibility/services.html
Es funktionierte gut!
Alte Frage, aber vielleicht ist diese Antwort hilft jemand.
Ja, es ist möglich, dass ein anderer die Zugänglichkeit service verbraucht KeyEvent.
Bitte haben Sie einen Blick auf FLAG_REQUEST_FILTER_KEY_EVENTS Dokumentation, es ist:
Einstellung dieses flag nicht garantieren, dass dieser service filter key-Ereignisse, da nur ein Dienst zu einem bestimmten Zeitpunkt. Dies vermeidet Verwirrung bei den Nutzern durch, um Verhalten zu ändern, falls andere Schlüssel-filtering-services aktiviert sind. Wenn es bereits einen anderen key-Filter-service aktiv ist, wird diese nicht erhalten, wichtige Ereignisse.
Also eine andere Zugänglichkeit service nutzen können KeyEvents.
Versuchen, entfernen die info.packageNames oder wenn er auf null. Laut der Dokumentation hier empfangen Sie nur Ereignisse, die durch diese Anwendung Pakete.
Wenn Sie speziell möchten Lautstärke-Taste drückt, aus einem Service, das wird funktionieren. Es wird überschreiben Lautstärke-Taste Aktion, so vermeiden Sie es Global.
Ich glaube, Sie müssen zur Umsetzung der" onAccessibilityEvent()" Methode, wenn Sie erweitern AccessibilityService;Sache wie: