2012-10-10 10 views
10

Ho un'applicazione Android che riproduce audio in streaming da Internet utilizzando la classe MediaPlayer.Come riprodurre l'audio in streaming in background su Android?

Come posso lasciarlo continuare a riprodurre l'audio sullo sfondo quando l'utente colpisce il tasto home per eseguire altre applicazioni?

Durante l'esecuzione di altre app, mi piacerebbe che continuasse a riprodurre l'audio.

risposta

10

È necessario utilizzare qualcosa chiamato Servizi Android.

Dalla documentazione:

"Un servizio è un componente dell'applicazione che rappresenta il desiderio sia un dell'applicazione per eseguire un'operazione più lungo in esecuzione mentre non interagisce con l'utente o per la fornitura di funzionalità per le altre applicazioni di utilizzare."

Ecco l'ottima guida ufficiale per l'utilizzo di servizi per iniziare: http://developer.android.com/guide/components/services.html

Ecco un buon tutorial sulla costruzione di un lettore audio: http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/

Ecco un video tutorial per la costruzione di un lettore di musica in streaming: http://www.youtube.com/watch?v=LKL-efbiIAM

+0

Grazie, darò un'occhiata a Servizi! – Winston

4

È necessario implementare un servizio per riprodurre i file multimediali in background senza essere legati all'attività che ha avviato la riproduzione. Dai un'occhiata a this example.

+0

Grazie per il suggerimento sui servizi e per il collegamento! – Winston

1

La chiave è definire Service.START_STICKY di continuare a giocare in background:

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

Service.START_STICKY: se il processo di questo servizio viene ucciso mentre è avviato il sistema cercherà di ricreare il servizio.

Questo è un esempio di fare questo: il servizio

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()"); 
    } 
} 

Inizio:

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

servizio di arresto:

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

Complete code of this example.

Problemi correlati