Ich bin sehr traurig, Ihnen zu sagen, aber ES IST MÖGLICH. Verwenden Sie folgenden code (FÜR NEUERE ANDROIDEN, ESP. MARSHMALLOW, SIEHE UNTEN DIE ANTWORT):
Beachten Sie, dass dieses Beispiel Richter durch ändern der Medien-Lautstärke, wenn Sie verwenden möchten anderen Lautstärke, ändern Sie es!
UPDATE:
Oben genannte Methode vermutlich nicht funktionieren Marshmallow, es gibt JEDOCH einen viel besseren Weg, jetzt seit MediaSession eingeführt wurde! So müssen Sie zuerst migrieren den code MediaController/MediaSession Muster und dann diesen code verwenden:
Irgendwie die Lautstärke-Taste drückt, werden erkannt, auch mit Bildschirm aus (nur sicher sein registrieren richtigen media-Taste Absicht receiver ggf. für Ihre Plattform!)
UPDATE 2 seit GalDude angefordert einige mehr info auf, wie Sie die Medien MediaSession/MediaController. Sorry, aber da ich nicht mehr mit Java wird es in Kotlin:
lateinit var mediaSession:MediaSessionCompat//you have to initialize it in your onCreate method
val kontroler:MediaControllerCompatget()= mediaSession.controller //in Java it's just getController() on mediaSession//in your onCreate/start method:
mediaSession =MediaSessionCompat(this,"YourPlayerName", receiver,null)
mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS orMediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS)
mediaSession.isActive =trueif(ratingIsWorking)//note: rating crashes on some machines you have to check it!
mediaSession.setRatingType(RatingCompat.RATING_5_STARS)
mediaSession.setCallback(object:MediaSessionCompat.Callback(){...//here you have to implement what happens with your player when play/pause/stop/ffw etc. is requested - see exaples elsewhere})//onDestroy/exit method:
mediaSession.isActive =false
mediaSession.release()
Den AOSP Musik-app ist ein Service (MediaPlaybackService) , reagiert auf die Lautstärke-Taste-Ereignisse durch die Registrierung eines BroadcastReceiver (MediaButtonIntentReceiver).
Hier ist der Codeausschnitt, wo es registriert der Empfänger:
War ich in der Lage, damit es funktioniert auf android 5+ Geräte mit MediaSession. AllerdingsContentObserver vorgeschlagen von @ssuukk hat bei mir nicht funktioniert auf beiden 4.4 und 7.0-Geräte (zumindest auf ROMs, die ich habe testen).
Hier ist ein vollständiges Beispiel, das funktioniert auf android 5+.
Service:
import android.app.Service;import android.content.Intent;import android.os.IBinder;import android.support.v4.media.VolumeProviderCompat;import android.support.v4.media.session.MediaSessionCompat;import android.support.v4.media.session.PlaybackStateCompat;publicclassPlayerServiceextendsService{privateMediaSessionCompat mediaSession;@Overridepublicvoid onCreate(){super.onCreate();
mediaSession =newMediaSessionCompat(this,"PlayerService");
mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
mediaSession.setPlaybackState(newPlaybackStateCompat.Builder().setState(PlaybackStateCompat.STATE_PLAYING,0,0)//you simulate a player which plays something..build());//this will only work on Lollipop and up, see https://code.google.com/p/android/issues/detail?id=224134VolumeProviderCompat myVolumeProvider =newVolumeProviderCompat(VolumeProviderCompat.VOLUME_CONTROL_RELATIVE,/*max volume*/100,/*initial volume level*/50){@Overridepublicvoid onAdjustVolume(int direction){/*
-1 -- volume down
1 -- volume up
0 -- volume button released
*/}};
mediaSession.setPlaybackToRemote(myVolumeProvider);
mediaSession.setActive(true);}@OverridepublicIBinder onBind(Intent intent){returnnull;}@Overridepublicvoid onDestroy(){super.onDestroy();
mediaSession.release();}}
Es fängt die Lautstärke-Tasten komplett so, während dieser code läuft, werden Sie nicht in der Lage, passen Sie ring volume über die Lautstärke-Tasten. Dies könnte möglich sein, zu beheben, ich wollte nur nicht versuchen.
Wenn Sie das Beispiel ausführen, wie ist die Lautstärke-Tasten bleiben wird gesteuert durch die app, auch wenn der Bildschirm ausgeschaltet ist und die app entfernt wurde "Recent Apps" Liste. Sie haben zu gehen, um Settings->Applicationssuchen Sie die app, und die Kraft es zu stoppen, um zu bekommen, Lautstärke-Tasten zurück.
Kasse Die Steuerung der App-Lautstärke und Wiedergabe ...Dies wird helfen, Ihr problem zu lösen... mehrere Anwendungen möglicherweise hören wollen für Knopf drückt aus dem hintergrund, dies kann der Grund sein, warum KeyEvents können nur behandelt werden, indem Sie Tätigkeiten, wie Sie sind die Schnittstelle zum Benutzer das drücken der Tasten.
Hinweis: dies funktioniert nur für Tätigkeiten und nicht Dienste wie die Frage Staaten.
Je nach dem Kontext, in dem die callback-erforderlich ist eine alternative Lösung verfügbar sein könnten.
Werden in der Lage, die Lautstärke-Taste eine Aktivität benötigen würde, um das überschreiben der dispatchKeyEvent Funktion. Für diese in mehrere Aktivitäten könnte schreiben könnte einer Oberklasse mit der überschriebenen Funktion, die erweitert wird durch alle nachfolgenden Aktivitäten.
Hier ist der code für das erkennen von lauter - /leiser-Taste drückt:
//Over-ride this function to define what should happen when keys are pressed (e.g. Home button, Back button, etc.)@Overridepublicboolean dispatchKeyEvent(KeyEventevent){if(event.getAction()==KeyEvent.ACTION_DOWN){switch(event.getKeyCode()){caseKeyEvent.KEYCODE_VOLUME_UP://Volume up key detected//Do somethingreturntrue;caseKeyEvent.KEYCODE_VOLUME_DOWN://Volume down key detected//Do somethingreturntrue;}}returnsuper.dispatchKeyEvent(event);}
Beurteilung durch die paar anderen Fragen über dieses Thema, nicht.
Andere Frage 1
Andere Frage 2
Dienste einfach nicht erhalten KeyEvent Rückrufe.
InformationsquelleAutor der Antwort Tanis.7x
Ich bin sehr traurig, Ihnen zu sagen, aber ES IST MÖGLICH. Verwenden Sie folgenden code (FÜR NEUERE ANDROIDEN, ESP. MARSHMALLOW, SIEHE UNTEN DIE ANTWORT):
Dann in Ihren Dienst onCreate registrieren Sie es mit:
Dann Registrierung im onDestroy:
Beachten Sie, dass dieses Beispiel Richter durch ändern der Medien-Lautstärke, wenn Sie verwenden möchten anderen Lautstärke, ändern Sie es!
UPDATE:
Oben genannte Methode vermutlich nicht funktionieren Marshmallow, es gibt JEDOCH einen viel besseren Weg, jetzt seit MediaSession eingeführt wurde! So müssen Sie zuerst migrieren den code MediaController/MediaSession Muster und dann diesen code verwenden:
Irgendwie die Lautstärke-Taste drückt, werden erkannt, auch mit Bildschirm aus (nur sicher sein registrieren richtigen media-Taste Absicht receiver ggf. für Ihre Plattform!)
UPDATE 2 seit GalDude angefordert einige mehr info auf, wie Sie die Medien MediaSession/MediaController. Sorry, aber da ich nicht mehr mit Java wird es in Kotlin:
InformationsquelleAutor der Antwort ssuukk
Den AOSP Musik-app ist ein Service (MediaPlaybackService) , reagiert auf die Lautstärke-Taste-Ereignisse durch die Registrierung eines BroadcastReceiver (MediaButtonIntentReceiver).
Hier ist der Codeausschnitt, wo es registriert der Empfänger:
Auch, vergessen Sie nicht über-manifest:
Dies funktioniert auch, wenn die Musik app nicht im Vordergrund ist. Ist nicht, was Sie wollen?
InformationsquelleAutor der Antwort Joe
War ich in der Lage, damit es funktioniert auf android 5+ Geräte mit
MediaSession
. AllerdingsContentObserver
vorgeschlagen von @ssuukk hat bei mir nicht funktioniert auf beiden 4.4 und 7.0-Geräte (zumindest auf ROMs, die ich habe testen).Hier ist ein vollständiges Beispiel, das funktioniert auf android 5+.
Service:
In
AndroidManifest.xml
:In Ihre Tätigkeit:
Gibt es mehrere Dinge zu beachten:
Settings->Applications
suchen Sie die app, und die Kraft es zu stoppen, um zu bekommen, Lautstärke-Tasten zurück.InformationsquelleAutor der Antwort Denis Kniazhev
Du zum spielen brauchst, leere sound aus dem Dienst dann nur Sie können hören, auf Veränderungen der Lautstärke. Folgendes hat bei mir
Schritte
1. Legen Sie leer.mp3 in raw-Ordner (Download von hier)
2. Start media in onStartCommand()
3. Sie müssen sich entscheiden, zu stoppen und release-mediaplayer. Es ist besser, dies zu tun in onDestroy()
4. Erstellen von Broadcast receiver lauschen Veränderungen der Lautstärke
5. Registrieren Sie die broadcast-receiver in onStartCommand()
6. Aufheben der Registrierung broadccast Empfänger in onDestroy()
Das ist alles
InformationsquelleAutor der Antwort Bikram Pandit
Android nicht Dokument-APIs für die Interaktion mit den Lautstärke-Tasten. Also ich denke, die Antwort ist Nein...
InformationsquelleAutor der Antwort Lincoln Hawk
Kasse Die Steuerung der App-Lautstärke und Wiedergabe ...Dies wird helfen, Ihr problem zu lösen... mehrere Anwendungen möglicherweise hören wollen für Knopf drückt aus dem hintergrund, dies kann der Grund sein, warum KeyEvents können nur behandelt werden, indem Sie Tätigkeiten, wie Sie sind die Schnittstelle zum Benutzer das drücken der Tasten.
InformationsquelleAutor der Antwort Ashish
Hinweis: dies funktioniert nur für Tätigkeiten und nicht Dienste wie die Frage Staaten.
Je nach dem Kontext, in dem die callback-erforderlich ist eine alternative Lösung verfügbar sein könnten.
Werden in der Lage, die Lautstärke-Taste eine Aktivität benötigen würde, um das überschreiben der
dispatchKeyEvent
Funktion. Für diese in mehrere Aktivitäten könnte schreiben könnte einer Oberklasse mit der überschriebenen Funktion, die erweitert wird durch alle nachfolgenden Aktivitäten.Hier ist der code für das erkennen von lauter - /leiser-Taste drückt:
InformationsquelleAutor der Antwort Maurice Gavin
Dies erfordert Lollipop (v5.0/API-21) oder höher
Mein Ziel war es, adjust system volume von einem Service. Jede Aktion kann getroffen werden, drücken obwohl.
InformationsquelleAutor der Antwort Gibolt