2012-10-10 2 views
10

Ich habe eine Android-Anwendung, die Streaming-Audio aus dem Internet unter Verwendung der MediaPlayer Klasse spielt.Wie kann ich Streaming-Audio im Hintergrund auf Android spielen?

Wie kann ich die Wiedergabe von Audio im Hintergrund fortsetzen, wenn der Benutzer die Home-Taste drückt, um andere Anwendungen auszuführen?

Während andere Anwendungen laufen, möchte ich weiterhin das Audio abspielen.

Antwort

10

Sie müssen etwas namens Android Services verwenden.

Aus der Dokumentation:

„Ein Service ist eine Anwendungskomponente, die entweder eine Wunsch der Anwendung einen länger laufenden Betrieb durchzuführen, während nicht mit dem Benutzer interagieren oder Funktionalität zu liefern, für andere Anwendungen zu nutzen.“

Hier ist die ausgezeichnete offizielle Leitfaden für Dienstleistungen mit Ihnen den Einstieg: http://developer.android.com/guide/components/services.html

Hier ist ein gutes Tutorial einen Audio-Player auf den Aufbau: http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/

Hier ist ein Video-Tutorial einen Streaming-Musik-Player für den Bau:

+0

Danke, ich sehe mir Services an! – Winston

4

Sie müssen einen Dienst implementieren, um Medien im Hintergrund wiedergeben zu können, ohne an die Aktivität gebunden zu sein, mit der die Wiedergabe gestartet wurde. Schauen Sie sich this example an.

+0

Danke für den Hinweis auf Dienste und für den Link! – Winston

1

Der Schlüssel ist Service.START_STICKY definieren im Hintergrund weiterzuspielen:

public int onStartCommand(Intent intent, int flags, int startId) { 
     myMediaPlayer.start(); 
     return Service.START_STICKY; 
    } 

Service.START_STICKY: Wenn dieser Prozess Dienst getötet wird, während es gestartet, um den Dienst versucht das System neu zu erstellen.

Dies ist ein Beispiel dafür, dies zu tun:

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.IBinder; 
import android.util.Log; 
import android.widget.Toast; 

/** 
* Created by jorgesys. 
*/ 

/* Add declaration of this service into the AndroidManifest.xml inside application tag*/ 

public class BackgroundSoundService extends Service { 

    private static final String TAG = "BackgroundSoundService"; 
    MediaPlayer player; 

    public IBinder onBind(Intent arg0) { 
     Log.i(TAG, "onBind()"); 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     player = MediaPlayer.create(this, R.raw.jorgesys_song); 
     player.setLooping(true); // Set looping 
     player.setVolume(100,100); 
     Toast.makeText(this, "Service started...", Toast.LENGTH_SHORT).show(); 
     Log.i(TAG, "onCreate() , service started..."); 

    } 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     player.start(); 
     return Service.START_STICKY; 
    } 

    public IBinder onUnBind(Intent arg0) { 
     Log.i(TAG, "onUnBind()"); 
     return null; 
    } 

    public void onStop() { 
     Log.i(TAG, "onStop()"); 
    } 
    public void onPause() { 
     Log.i(TAG, "onPause()"); 
    } 
    @Override 
    public void onDestroy() { 
     player.stop(); 
     player.release(); 
     Toast.makeText(this, "Service stopped...", Toast.LENGTH_SHORT).show(); 
     Log.i(TAG, "onCreate() , service stopped..."); 
    } 

    @Override 
    public void onLowMemory() { 
     Log.i(TAG, "onLowMemory()"); 
    } 
} 

Dienst starten:

Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class); 
startService(myService); 

Stop-Service:

Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class); 
stopService(myService); 

Complete code of this example.