Autore Topic: Gestione Servizio Musicale  (Letto 846 volte)

Offline Raffyna

  • Utente junior
  • **
  • Post: 104
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
  • Sistema operativo:
    seven
Gestione Servizio Musicale
« il: 04 Febbraio 2013, 11:10:25 CET »
0
Salve ragazzi, ho un problema di gestione di un servizio in background: ho una serie di activity in cascata, a partire dalla prima deve partire una musica di background (e la cosa va, grazie al metodo setLooping). Il problema è questo: se termino l'app (per intenderci, col tasto indietro del menù sul cellulare), termina la musica (e questo è giusto), ma non termino l'app e la metto solo in pausa, quando la riapro il servizio è morto lo stesso.
Il servizio è gestito da una classe che estende Service e gestisce un oggetto MediaPlayer, vi riporto solo i metodi interni alla classe.
Vi riporto poi i metodi onCreate e onDestroy dell'activity che avvia il servizio (la principale).
Ho provato ad implementare i metodi onPause() e onResume() ma senza alcun risultato. Inoltre ho inserito nel manifest la dichiarazione che mi fa usare il servizio, vi riporto anche quella.
Grazie a chiunque mi risolvi il problema.

*Metodi classe MusicService che estende Service
@Override
   public void onStart(Intent intent, int startId) {       
           super.onStart(intent, startId);
           player = MediaPlayer.create(this, R.raw.background_music);
           player.setLooping(true);// musica infinita
           player.start();
       }
    
       @Override
      public void onDestroy() {
           super.onDestroy();
           player.stop();
           player.release();
       }


*Metodi dell'activity che avvia il servizio

@Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      startService(new Intent(MainActivity.this, MusicService.class));
      
   }
   
   //richiamata solo se il sistema ha bisogno di memoria
   @Override
   public void onDestroy() {
      super.onDestroy();
      stopService(new Intent(MainActivity.this, MusicService.class));
   }

*Manifest

 <service
            android:name="com.raffaele.eleonora.raffaella.iseeso.MusicService"
            android:enabled="true"
            android:exported="true"
            android:process=":remote" >
        </service>

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Gestione Servizio Musicale
« Risposta #1 il: 04 Febbraio 2013, 14:27:30 CET »
0
Provato a startare il servizio nell'onResume invece che nell'onCreate?
L'onCreate viene chiamato solo all'avvio dell'activity se non era stata precedentemente creata, quando un'activity viene "congelata" e "resuscitata" in seguito ad una nuova richiesta l'onCreate non viene chiamato, ma l'onResume si.

Offline Raffyna

  • Utente junior
  • **
  • Post: 104
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    htc wildfire
  • Sistema operativo:
    seven
Re:Gestione Servizio Musicale
« Risposta #2 il: 04 Febbraio 2013, 14:57:57 CET »
0
Allora, se faccio come hai detto tu, non smette mai più di suonare. Se introduco nell'acitivty il metodo onPause() in cui stop il servizio mediante la sua primitiva al finedi ottenere un fermo della musica quando premo "HOME", quando passo ad un'altra activity, giustamente, mi ferma il servizio.
Altre idee?

Offline Sakazaki

  • Utente normale
  • ***
  • Post: 396
  • Respect: +74
    • Mostra profilo
  • Dispositivo Android:
    Sony xperia Z
  • Play Store ID:
    Saka Labs
  • Sistema operativo:
    Windows 8
Re:Gestione Servizio Musicale
« Risposta #3 il: 04 Febbraio 2013, 15:33:53 CET »
0
C'ho provato  :-P

Credo che dare un'occhiata al ciclo di vita di un'activity possa dare suggerimenti utili per capire dove conviene fare lo stop/start del servizio :)