2016-05-15 5 views
1

Wohin konvertiert Android die Taste für physische Medien (im Headset-Kabel) in logische Aktionen (wie NEXT, STOP, SPEECH QUERY)?Wo interpretiert Android den Media-Button?

Gibt es eine Möglichkeit, diese Zuweisung zu ändern (dh andere Aktionen daraus zu erstellen)?

Hinweis: Ich habe versucht, einen MediaButtonReceiver zu installieren. Aber es sieht nur den interpretierten Schlüssel. So sehe ich nur den Tastendruck, nachdem der Schlüssel früher genug freigegeben wurde, um keine SPEECH QUERY auszulösen.

Update: Ich sehe die Raw-Key-Ereignisse, die ich brauche, in onDispatchKeyEvent, solange meine App im Vordergrund ist. Aber wie bekomme ich sie, wenn der Sperrbildschirm aktiv ist?

Der MediaButtonReceiver wird aufgerufen, wenn sich die App im Hintergrund befindet (aber erst, nachdem der Schlüssel freigegeben wurde).

Antwort

1

Bevor Ihre App mit der Wiedergabe von Audio beginnt, sollte sie den Audiofokus für den Stream enthalten, den sie verwenden wird. Dies geschieht mit einem Aufruf von requestAudioFocus(), der AUDIOFOCUS_REQUEST_GRANTED zurückgibt, wenn Ihre Anfrage erfolgreich ist.

Sie müssen angeben, welchen Stream Sie verwenden und ob Sie einen vorübergehenden oder permanenten Audiofokus erwarten.

// Request audio focus for playback 
int result = am.requestAudioFocus(afChangeListener, 
         // Use the music stream. 
         AudioManager.STREAM_MUSIC, 
         // Request permanent focus. 
         AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_MAY_DUCK); 

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { 
// Start playback. 
} 

Suchen Sie nach mehr information.

Um Echtzeit-Ereignis in Ihrer APP zu verwenden, ist der RTP der Weg zu gehen. Es bietet APIs für RTP (Real-time Transport Protocol), allowing Anwendungen zur Verwaltung von On-Demand oder interaktivem Datenstreaming.

+0

Das Problem bleibt gleich. Ich sehe nur kurze Tastendrücke, die mir gesendet werden, wenn die Taste bereits losgelassen wurde (zusammen mit der Tastenfreigabe). Sie enthalten Zeitstempel, aber ich brauche die Ereignisse in Echtzeit. –

+0

Ich kann nicht sehen, wie die RTP-APIs neuen Zugriff auf den Media-Button geben. Hast du ein Beispiel? –