我正在我的应用程序中实现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;
}
}
答案 0 :(得分:3)
首先,你永远不能选择在BroadcastReceiver中长时间运行,因为系统不喜欢你。 所以我有点困惑。您希望音乐在后台播放,因此您使用了服务。那是正确的。 但是现在你说当用户退出或暂停你的活动时,音乐仍在播放?嗯,是的,这不是你把它放在服务中的原因吗?
您有2个选项。您可以移动调用以在活动的onStart()/ onResume()和onPause()/ onStop()中启动和停止媒体播放器。只有当Activity有前景时才会播放音乐。
您的第二个选择是将MediaPlaying保留在服务中。但是,您需要向您的服务发送一个意图,让它知道何时停止播放音乐。最好的办法就是打包一个PendingIntent,以便为Notification Manager提供一个活动,该活动上有一个按钮,可以暂停和播放你的音乐。如果您没有提供一种方法来回到控制服务的Activity,那么您的音乐将播放到最后,用户将无法将其关闭。
答案 1 :(得分:0)
问题在于沟通。
您在player.start()
中使用了onStartCommand()
,因此该服务可以开始播放。
停止/暂停音乐从未传达给服务,因此也存在问题。