Sunday, July 24, 2011

Android: Eine kleine Radio-App

Oft hat es mich bereits gefrustet, dass es vom MDR bereits für Jump eine Android-App gab, mit der man den Internetradio-Stream hören konnte, aber für mein geliebtes Figaro dagegen nicht. Einen Livestream haben Sie zwar schon, jedoch ist dieser nur über die Internetseite von MDR Figaro abspielbar.

Nun ja, das stimmt nicht ganz, man kann auch noch eine Wiedergabeliste dafür herunterladen. Ein beliebiger Player kann den Stream dann abspielen. Nachdem ich mir die Wiedergabeliste, eine pls-Datei, mal im Texteditor angeschaut hatte, war mir klar, dass ich auch selbst was damit anstellen könnte.

So schaut eine pls-Datei aus:

[playlist]
numberofentries=1
File1=http://c22033-l.i.core.cdn.streamfarm.net/22007mdrfigaro/
  live/3087mdr_figaro/live_de_128.mp3 
Length1=-1

Gestern früh kam mir dann der Gedanke: Jetzt wo ich selbst ein Android-Telefon besitzte und ich auch noch Java kann, sollte ich mir doch mal eine eigene Figaro-App schreiben.

Den entsprechend geeigneten Player zu finden , der von Android für Internet-Audiostreams geboten wird, war nicht schwer. Der AsyncPlayer ist sehr einfach zu benutzen. Man übergibt einen URI und sagt ihm, dass er den Stream abspielen soll. Nach ein paar Sekunden beginnt er. Will man die Wiedergabe anhalten, ruft man die Stop-Methode auf. Mehr kann man mit diesem Player nicht anstellen. Folgender Code zeigt ein Beispiel:

android.media.AsyncPlayer player = new AsyncPlayer("StreamPlayer");
Uri uri = Uri.parse("http://c22033-l.i.core.cdn.streamfarm.net/22007mdrfigaro/
  live/3087mdr_figaro/live_de_128.mp3");
player.play(this, uri, true, AudioManager.STREAM_MUSIC);
// Der Stream läuft
player.stop();
// Der stream ist gestoppt. Pause gibt es nicht.

Die App kommt aufgrund der Einfachheit mit einer Activity aus. Leider habe ich doch mehr als 5 Stunden daran gesessen. Grund dafür ist die bescheidene Android-Oberflächengestalltung. Das Layout macht nie das, was es soll :-) Die Beschreibung der View in XML ist eine saubere Sache, da Logik und Anzeige getrennt werden. Jedoch wäre es meines Erachtens nach gut gewesen, sich bei der Beschreibung der Oberfäche an XHTML und CSS zu orientieren. Lange Rede, kurzer Sinn: Die entworfene Oberfläche ist sehr einfach gehalten. Ein Play/Pause-Button und ein Stop-Button sowie ein Hintergrundbild habe ich für die View verwendet.

 Wer Interesse an der App hat, kann Sie sich unter folgendem Link herunterladen.

http://dl.dropbox.com/u/3538883/Downloads_Max_Blog/MDRFigaroWebRadio.apk

3 comments:

  1. Oberflächen mit XHTML und CSS für Android? Gabs da nicht was?
    Ob man bei phonegab auch Java-Code einbinden kann? Das wäre dann ja recht spannend. Man baut seine Oberfläche in HTML und bindet funktionalitäten per Schnittstelle aus Java ein.

    ReplyDelete
  2. Der Nachteil von PhoneGap war doch gerade eben, dass man auf die ganzen Plattform spezifischen Features verzichten muss. Will man also auf diese Features zugreifen, muss man doch zwangsweise die native Variante verfolgen.
    Hm, da kenn ich mich noch zu wenig mit aus. Toll wäre das jedoch schon, wenn man doch irgendwie auf die Systemspezifischen Sachen zugreifen könnte. Wenn ich mich irgendwann mal mit PhoneGap beschäftige, werde ich auch noch mal wegen dieser Sache schauen.

    ReplyDelete
  3. Naja man müsste die Plattformunabhängigkeit von PhoneGap ignorieren und nur den Vorteil betrachten, dass man Oberflächen angenehmer entwickeln kann. Rein hypothetisch würde man dann eben HTML für die Oberfläche nehmen aber auf Android-Spezifische Funktionen zugreifen. Die APP wäre dann zwar Android-Only aber was soll.
    Geht mit Phonegap vermutlich nicht aber vieleicht gibt es etwas ähnliches...

    ReplyDelete