Apps für Android programmieren leicht gemacht!
Musik von fremdem Player stoppen

Musik von fremdem Player stoppen

Wer schon einmal Musik gehört hat und anschließend ein Android Spiel geöffnet hat, der kennt das Problem.
Die Musik stoppt und wir müssen nach dem Start des Spieles den Musikplayer wieder manuell starten.

Insbesondere kennen wir diese Thematik, wenn wir beispielsweise dem aktuellen Hype um Pokemon Go frönen.
Wir wollen uns damit beschäftigen, wie wir beim Start unserer eigenen App die Musik und damit den Musikplayer von Android stoppen können, um unsere eigene Hintergrundmusik abzuspielen.

 

Erläuterung

Vielleicht sollten wir vor der Programmierung klären, wie Android das Abspielen von Musik oder allgemein Tönen handhabt.

Android besitzt mehrere Streams, die wir zum Abspielen von Tönen/Musik ansteuern können.
Dieses Streams können wir als Kanäle ansehen.
Unter anderem gibt es Streams/Kanäle für Musik, für Klingeltöne/Benachrichtigungen und Wecktöne.

Jeder dieser Streams kann immer nur von einer App gleichzeitig genutzt werden und idealerweise wird ein Stream immer dann wieder von der gerade benutzenden App freigegeben, wenn die Wiedergabe beendet wurde.
Sollte ein Stream mal nicht freigegeben sein, dann nimmt Android der ersten App den Stream einfach weg und verteilt ihn an die App, die zuletzt gefragt hatte. Der Fokus wird geändert.

Wer einmal viele Benachrichtigungstöne von verschiedensten Apps gleichzeitig erhalten hat, der wird bereits bemerkt haben, dass ab und an mal Benachrichtigungstöne der einen App von denen einer anderen App verschluckt wurden. Eben genau dann, wenn gerade der Fokus von einer App zu einer anderen App übergangen ist.

 

Programmierung

Alles was wir nun zu erledigen haben, ist der gerade Musik abspielenden App den Fokus zu „klauen“.
Besitzt die Musik App keinen Fokus mehr auf einen Stream, dann stoppt auch die Musik.

Ist die Musik App nicht ausreichend programmiert läuft das Lied dort weiter, wird aber nicht mehr über die Lautsprecher ausgegeben. Dieses Problem sollte und darf uns hier aber nicht interessieren.

AudioManager am = (AudioManager)getSystemService(Context.AUDIO_SERVICE);

// Fordere den Fokus für deine App an.
int result = am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);

if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
    // Der Fokus liegt nun auf dieser App. Die Musik sollte gestoppt haben.
}

Mit „AudioManager.STREAM_MUSIC“ fordern wir den Fokus für den Musik Stream an.
Mit „AudioManager.AUDIOFOCUS_GAIN“ fordern wir den Fokus dauerhaft an.

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld