【问题标题】:When to stop music in a music player何时停止音乐播放器中的音乐
【发布时间】:2018-09-08 03:52:54
【问题描述】:
我正在用 exoplayer 构建一个音乐播放器。我正在使用单独的音乐播放服务,但问题是即使我通过转到最近关闭主要活动,音乐也会继续播放。我试图通过在调用 onDestroy() 时停止服务来解决这个问题。然而,当按下返回按钮时,这也会停止音乐服务。我在 Musixmatch 中检查了这两种情况,如果您从最近关闭应用程序,它确实会停止,但当您按下应用程序中的后退按钮时它不会停止,即使我可以看到在应用程序再次启动时再次创建了主要活动。那么如何在我的应用中实现同样的效果呢?
【问题讨论】:
标签:
android
media
android-lifecycle
activity-lifecycle
exoplayer2.x
【解决方案1】:
我有一个示例 android 声音项目 - 当我转到最近并“关闭所有”我的音频停止时。并使用 goBack - 您可以暂停,但如果您不这样做,它会继续播放。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_audio);
mediaPlayer = MediaPlayer.create(this,R.raw.oldcar);
mediaPlayer.start();
}
public void goBack(View view){
//mediaPlayer.pause();
Log.i("info","ending audio activity");
finish();
}
【解决方案2】:
所以我们需要在从最近删除任务时停止服务。为此你可以看看"stop service when remove app through recent app"的解决方案。
它基本上建议在调用public void onTaskRemoved(Intent rootIntent)时停止服务。
1).在您的清单中添加您定义服务的 stopWithTask 属性:
<service
android:enabled="true"
android:name=".YourService"
android:exported="false"
android:stopWithTask="true" />
2). 如果上述方法不起作用,则执行反向操作
<service
android:enabled="true"
android:name=".MyService"
android:exported="false"
android:stopWithTask="false" /> //change to false
因此您的服务的方法 onTaskRemoved 将被调用。 (请记住,如果您将 stopWithTask 设置为 true,它将不会被调用。
public class YourService extends Service {
@Override
public void onStartService() {
//your code
}
@Override
public void onTaskRemoved(Intent rootIntent) {
System.out.println("onTaskRemoved called");
super.onTaskRemoved(rootIntent);
//do something you want
//stop service
this.stopSelf();
}
}