2013-01-04 5 views
11

Sono nuovo di Android. Sto creando un servizio per Media Player in modo che possa continuare a riprodurre la canzone anche se chiudo l'applicazione. Ho creato attività per Media Player e ha tutte le funzionalità come play, pause, next, previous, seekbar e include anche l'elenco completo. Tutto funziona eccellente. Ma ora voglio che tutto debba essere gestito dal servizio.MediaPlayer Service Android

ho creato MyService Classe:

public class MyService extends Service { 

    public static MediaPlayer mp; 

    @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public void onCreate() { 
     mp = new MediaPlayer();  
    } 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     return START_STICKY; 
    } 

Ma nella mia attività di giocatore ho creato ArrayList per Songlist da cui mi sto prendendo currentsongIndex e attraverso di essa sto mantenendo tutte le funzionalità come prossimo, precedente e tutti. Ora in servizio come faccio ad ottenere la lista delle canzoni che è richiesta anche nella mia attività ?? Dove dovrei creare oggetti MediaPlayer significa in servizio o attività ??

per MediaPlayer che ho segnalato http://www.androidhive.info/2012/03/android-building-audio-player-tutorial/. Per il mio codice del lettore multimediale è possibile consultare questo sito. Grazie. Chiarisci il mio dubbio. Sono così confuso. Rispondimi presto ..

+0

Crealo in servizio. Questa è la classe che ha bisogno della lista dei brani. –

+0

Significa che ho bisogno di creare una lista di canzoni in servizio. Ma quando clicco sul prossimo pulsante dell'attività, come sarà gestito il mio servizio? – zanky

+0

puoi pubblicare anche il codice attività? Inoltre, non sono sicuro che sto ricevendo il tuo requisito giusto. Puoi anche creare una classe separata per le canzoni e quindi chiamarla usando un oggetto ovunque richiesto. –

risposta

7

Sei sulla strada giusta. Mi sono adattato dai campioni SDK; questo è come lo faccio e funziona alla grande. Dal tuo ArrayList (nella vostra attività non dal servizio) chiamare

onListItemClick 

e avviare un intento che avvia il servizio di musica:

startService(new Intent(MusicService.ACTION_PLAY)); 

Nel vostro manifesto è necessario aggiungere:

<intent-filter> 
      <action android:name="com.blah.blah.action.PLAY" /> 
      <xxx xxx> 
</intent-filter> 

E naturalmente nel tuo servizio musicale devi ricevere l'intento:

public int onStartCommand(Intent intent, int flags, int startId) { 
    String action = intent.getAction(); 
    if (action.equals(ACTION_PLAY)) 
     processPlayRequest(); 
    } 

Assicurati di aggiungere Intenti per saltare, riavvolgere, interrompere ecc. Fammi sapere se questo è utile.

+0

sì .. voglio solo questo. ma hw posso accedere al pulsante attività dal mio servizio in quanto voglio cambiare il tasto sourceimage quando suono e quando mi fermo sullo stesso pulsante. ne idea ?? – zanky

+0

Probabilmente questo dovrebbe essere gestito all'interno della tua attività, ma potresti anche inizializzare il pulsante come "public static Button myButton;" quindi puoi cambiare l'immagine da qualsiasi luogo, ma non ti consiglierei di farlo in questo modo ... piuttosto da all'interno dell'evento 'onClick' e lascia che il servizio musicale gestisca la riproduzione della musica. Se sei soddisfatto della mia risposta sopra, contrassegna come accettato. –

1

L'esecuzione dell'app in background dovrebbe essere gestita dal 'Servizio' stesso.
Prova a seguire questo esempio http://www.vogella.com/articles/AndroidServices/article.html
Un servizio è progettato per funzionare in background.

+0

grazie per aver dedicato del tempo al mio problema .. – zanky

+1

sicuro. Cerca di non attenersi a un pezzo di codice anche mentre consulta i tutorial. Tutto ciò che devi fare è creare il layout di base dell'attività (pulsanti e alcune funzioni, ecc.). Puoi avviare il servizio nel 'onclick' di un pulsante e lasciare che il servizio venga eseguito in background. i mediaplayer/canzoni vanno nella classe di servizio. –

0

Ho attraversato esattamente la stessa cosa! È una soluzione a lungo termine per sviluppare anche una fantastica app per lettore mp3. La risposta è lunga

Ecco alcune risorse che mi hanno davvero aiutato. Android ha un articolo su questa cosa molto nelle loro documentazione per sviluppatori:

http://developer.android.com/guide/components/services.html

prestare attenzione a quello che dice in fondo a questo lungo articolo sui servizi legati e in esecuzione in primo piano.

Inoltre, la gestione dello stato del giocatore è ciò che mi ha causato i maggiori grattacapi.

Avrete anche voglia di dare un'occhiata al threading perché spawning che il nuovo servizio eseguirà ancora tutto sul Main UI Thread, sembra folle ma vero. Dai un'occhiata a ExecutorService per la gestione dei pool di thread. Vorrei poterti dire che è stato più facile.

Purtroppo la maggior parte della mia formazione formale da tutto il web, ma con i servizi di Android viene fornito da un sito a pagamento:

http://www.pluralsight.com/training/Courses/TableOfContents/android-services

E 'una buona risorsa per tutti i programmatori che penso, ma ha grandi sezioni su molti aspetti della programmazione Android che sono trattati solo brevemente su altri siti di tutorial.

Anche le risorse di Vogella sono buone, menzionate sopra.