Android服务播放音乐并在暂停和停止时停止

时间:2012-06-22 20:26:51

标签: android service media-player android-mediaplayer

我正在我的应用程序中实现MediaPlayer类,我希望在后台播放音乐,因此我使用Service而不是Activity或BroadcastReciever。现在的问题是,如果用户存在或暂停应用程序,音乐播放不会停止。我确实添加了onStop和onPause方法,但问题仍然存在。我不能像在Activity类中那样调用super.onPause()方法。

经过一番研究后,我发现服务保持活跃,即使应用暂停或停止。(我不知道这是真的)但根据我的经验,我认为这是真的。我该怎么办?我搜索了谷歌和stackoverflow的答案,但无法得到答案。

这是一段代码。

 package in.isuru.animation;

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

 public class PlayMusic extends Service{

private static final String TAG = null;
MediaPlayer player;

public void onCreate(){
    super.onCreate();
    Log.d(TAG, "Music service started onCreate()");
    player = MediaPlayer.create(this, R.raw.oh_holy_night);
    player.setLooping(true);
    //player.setVolume(100, 100);
}

public int onStartCommand(Intent intent, int flags, int startId){
    player.start();
    Log.d(TAG, "Player started!");
    if(player.isLooping() != true){
        Log.d(TAG, "Player not playing any file.");
    }
    return 1;
}

public void onStart(Intent intent, int startId){

}

public IBinder onUnBinder(Intent arg0){
    return null;
}

public void onStop(){
    player.stop();
    player.release();
}

public void onPause(){

    player.stop();
    player.release();

}

public void onDestroy(){
    player.stop();
    player.release();
    Log.d(TAG, "Player destroyed");
}

public void onLowMemory(){
    player.release();
}

@Override
public IBinder onBind(Intent arg0) {

    return null;
}

}

2 个答案:

答案 0 :(得分:3)

首先,你永远不能选择在BroadcastReceiver中长时间运行,因为系统不喜欢你。 所以我有点困惑。您希望音乐在后台播放,因此您使用了服务。那是正确的。 但是现在你说当用户退出或暂停你的活动时,音乐仍在播放?嗯,是的,这不是你把它放在服务中的原因吗?

您有2个选项。您可以移动调用以在活动的onStart()/ onResume()和onPause()/ onStop()中启动和停止媒体播放器。只有当Activity有前景时才会播放音乐。

您的第二个选择是将MediaPlaying保留在服务中。但是,您需要向您的服务发送一个意图,让它知道何时停止播放音乐。最好的办法就是打包一个PendingIntent,以便为Notification Manager提供一个活动,该活动上有一个按钮,可以暂停和播放你的音乐。如果您没有提供一种方法来回到控制服务的Activity,那么您的音乐将播放到最后,用户将无法将其关闭。

答案 1 :(得分:0)

问题在于沟通。 您在player.start()中使用了onStartCommand(),因此该服务可以开始播放。

停止/暂停音乐从未传达给服务,因此也存在问题。