2

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

经过一些研究,我发现即使应用程序暂停或停止,服务也会保持活跃。(我不知道这是真的)但根据我的经验,我认为这是真的。我该怎么办?我在 google 和 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;
}

}
4

2 回答 2

3

首先,您永远无法在 BroadcastReceiver 中执行任何长时间运行的操作,因为系统不会喜欢您。所以我有点困惑。您希望音乐在后台播放,因此您使用了服务。那是对的。但是现在您说当用户退出或暂停您的活动时,音乐仍在播放?是的,它会的,这不是你把它放在服务开始的原因吗?

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

您的第二个选择是将 MediaPlaying 保留在服务中。但是,您需要向您的 Service 发送一个 Intent,让它知道何时停止播放音乐。最好的方法是打包一个 PendingIntent 给通知管理器,通知管理器将启动一个 Activity,它上面有按钮,可以暂停和播放你的音乐。如果您不提供让用户返回控制服务的 Activity 的方法,那么您的音乐将播放到最后,用户将没有很好的方法将其关闭。

于 2012-06-22T20:40:56.840 回答
0

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

停止/暂停音乐从未传达给服务,因此出现了问题。

于 2015-08-25T04:15:58.233 回答