我尝试了数百万的方式,但是当我播放手机的HOME按钮时,音乐会以各种方式继续播放。 我的最后一次尝试是应用程序,但我仍然遇到同样的问题。
这是我的代码。
public class ProvaMusica extends Application {
Intent musica_backGround;
public Background_music musicaDiBackground = new Background_music();
public void avvia(){
//this is the class where i manage mediaplayer//////////
musica_backGround=new Intent(this, Background_music.class);
startService(musica_backGround);
}
public void onDestroy(){
stopService(musica_backGround);
}
}
在我的第一个活动中,我使用此代码启动音乐
ProvaMusica appState = ((ProvaMusica)this.getApplication());
appState.avvia();
现在,我应该怎么做才能在播放其他活动时播放音乐,并在我的应用未显示时停止播放音乐?
我希望音乐能够在从活动到另一个活动的同时继续播放,我不想停止音乐,然后在新的活动开始时重新开始。
答案 0 :(得分:2)
我这样做的方式是:
答案 1 :(得分:0)
您可以拥有Application
课程并将其设置为AndroidManifest
。在onDestroy()
回调中,您可以使用stopService()
功能停止服务,也可以使用Intent
启动服务以停止播放音乐。
答案 2 :(得分:0)
您的应用作为Android操作系统中的一个进程。 Android操作系统有多种终止进程的方法,有时在进程被终止之前可能不会调用onDestroy()之类的回调函数。因此,如果您在服务中启动和播放音乐,只要您的过程存在,音乐就会播放。但是,如果您希望它停止,当您的应用程序的特定活动被终止时,您可以覆盖该活动的onDestroy()并为您的服务广播一条消息以停止音乐。 使用服务来实现此目的。
答案 3 :(得分:0)
也许我找到了一种混合你们所有人给我的建议的方式。
使用此代码进行背景音乐(在此情况下通过服务管理)只有当用户使用后按钮关闭应用程序时,当用户使用主按钮关闭应用程序并且屏幕关闭时,因为用户锁定屏幕设备的锁定按钮。
我希望有人比我更专业,更擅长编程以确认这是正确的
在本课程中,我会检查我当前的活动是否在前台
public class GestioneApplicazioneInBackground{
public static boolean applicazioneInBackground(final Context context) {
ActivityManager am = (ActivityManager) MainActivity.context.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName())) {
return true;
}
}
return false;
}
}
在我所有活动的onStop()和onPause()方法中,我有这段代码
/// if my app and his activities are in background i stop the service i started in my main/first activity////
if(GestioneApplicazioneInBackground.applicazioneInBackground(this) ){
context_of_the_Intent.stopService(intent);
}
else{
// if my app and his activities are NOT in background i check if user turned off the screen with the lock button of the device//////
PowerManager kgMgr = (PowerManager) getSystemService(Context.POWER_SERVICE);
boolean showing = kgMgr.isScreenOn();
if(!showing){
context_of_the_Intent.stopService(intent);
}
}
答案 4 :(得分:0)
使用这个:如果您使用媒体播放器,请在您的活动中调用此方法...
MediaPlayer mp=null;
@Override
protected void onDestroy() {
super.onDestroy();
if (!(mp == null)) {
if (mp.isPlaying()) {
mp.stop();
mp.release();
mp = null;
}
}
};
v @Override
protected void onResume() {
super.onResume();
if (!(mp == null)) {
if (mp.isPlaying()) {
mp.stop();
mp.release();
mp = null;
}
}
};