2013-03-29 4 views
0

i ont un service android qui joue music.i commencer dans mon activité principale avec ce code:le démarrage d'une activité cesse le service Android

Intent service = new Intent(MainMenu.this, musicservice.class); 
MainMenu.this.startService(service); 

et c'est mon service:

public class musicservice extends Service { 
@Override 
public IBinder onBind(Intent arg0) { 
    return null; 
} 

@Override 
public int onStartCommand(Intent intent, int flags, int startId) { 
    super.onStartCommand(intent, flags, startId); 

    MediaPlayer mp; 
    mp = MediaPlayer.create(musicservice.this, R.raw.music); 
    mp.setOnCompletionListener(new OnCompletionListener() { 
     public void onCompletion(MediaPlayer mp) { 
      mp.release(); 
     } 
    }); 
    mp.start(); 

    return Service.START_STICKY; 
} 

@Override 
public void onDestroy() { 
    super.onDestroy(); 
} 

}

ça marche très bien, mais quand je commence une autre activité, ma musique se déclenche et semble que mon service détruit !! mais ne le veux pas, je veux que mon service s'arrête seulement quand mon application se termine. la musique ne joue que lorsque l'utilisateur travaille avec l'application. même lorsque l'application en arrière-plan je veux que ma musique ne joue pas! comment je peux mettre en œuvre cela?

+0

Juste pour clarifier les choses, que vous voulez la musique d'arrêter de jouer dès que vous démarrez une autre Activité? Ou voulez-vous continuer à jouer quand vous avez commencé une autre activité? Je pose cette question à cause de la réponse que vous avez donnée à TGMCians. Au début, je pensais que les TGMCiens avaient mal compris votre question, mais sur la base de votre réponse à lui - je n'en suis plus si sûr. –

Répondre

0

Le service détruit lorsque votre activité détruit lorsque vous démarrez le service de l'activité. Utilisez AlarmManager pour planifier le service de façon répétée.

+0

alors je dois commencer mon service d'où? – Fcoder

+0

Farhad, En supposant que vous voulez vraiment que votre musique continue à jouer quand une autre activité a commencé (c'est la direction vers laquelle TGMCians va vers je pense). Vous devez démarrer un fil distinct à partir de votre activité, qui à son tour démarrera le service de musique à partir de ce fil. Mais pour que vos utilisateurs puissent facilement arrêter cette musique lorsque votre activité n'est plus visible, il est courant d'autoriser votre utilisateur à arrêter la musique depuis la zone de notification sous la barre d'état/la barre d'action et/ou d'arrêter le service de musique. lorsque l'utilisateur débranche ses écouteurs. –

1

Si vous voulez que votre application joue de la musique pendant que votre activité est active, essayez bind it.

il devrait ressembler à ceci:

Service:

package com.example.service; 

import android.app.Service; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.media.MediaPlayer.OnCompletionListener; 
import android.os.Binder; 
import android.os.IBinder; 

import com.example.playmusic.R; 

public class PlayMusicService extends Service { 

    private final IBinder binder = new LocalBinder(); 

    private MediaPlayer player; 

    @Override 
    public IBinder onBind(Intent intent) { 
     return binder; 
    } 

    public class LocalBinder extends Binder { 

     public PlayMusicService getService() { 
      return PlayMusicService.this; 
     } 
    } 

    public void play() { 
     player = MediaPlayer.create(this, R.raw.music); 
     player.setOnCompletionListener(new OnCompletionListener() { 
      @Override 
      public void onCompletion(MediaPlayer mp) { 
       mp.release(); 
      } 
     }); 
     player.start(); 

    } 

    public void pause() { 
     player.pause(); 
    } 
} 

Activité:

package com.example.playmusic; 

import android.app.Activity; 
import android.content.ComponentName; 
import android.content.Context; 
import android.content.Intent; 
import android.content.ServiceConnection; 
import android.os.Bundle; 
import android.os.IBinder; 

import com.example.service.PlayMusicService; 
import com.example.service.PlayMusicService.LocalBinder; 

public class MainActivity extends Activity { 

private PlayMusicService service; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    service.pause(); 
} 

@Override 
protected void onStart() { 
    super.onStart(); 
    if (service != null) { 
     service.play(); 
    } else { 
     bindService(); 
    } 
} 

    private void bindService() { 
     bindService(new Intent(this, PlayMusicService.class), new ServiceConnection() { 

      @Override 
      public void onServiceDisconnected(ComponentName name) { 
       service = null; 

      } 

      @Override 
      public void onServiceConnected(ComponentName name, IBinder binder) { 
       LocalBinder localBinder = (LocalBinder) binder; 
       service = localBinder.getService(); 
       service.play(); 

      } 
     }, Context.BIND_AUTO_CREATE); 
    } 

} 
Questions connexes