移动到另一个活动时,音乐停止,同时使用后台服务播放音乐

时间:2017-11-30 10:04:39

标签: java android android-activity service

我正在开发一款游戏,我已经使用服务在所有活动中播放音乐。 当我们按下主页键时,我想停止音乐,当从一个活动转移到另一个活动时,它不应该停止播放音乐。

public class backService extends Service {
private MediaPlayer mp;
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    return START_STICKY;
}

@Override
public void onDestroy() {
    super.onDestroy();
    mp.stop();
    mp.release();
}

@Override
public void onCreate() {
    super.onCreate();
    mp = MediaPlayer.create(this, R.raw.all);
    mp.setLooping(true);
    mp.start();
}

@Nullable
@Override
public IBinder onBind(Intent intent) {
    return null;
}
    }

和我的主要活动文件

public class Home extends AppCompatActivity {
private AdView mAdView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    hide();
    setContentView(R.layout.activity_home);
    Intent i = new Intent(this, backService.class);
    adv();
}



@Override
protected void onResume(){
    super.onResume();
    Intent i = new Intent(this, backService.class);
    startService(i);
}

@Override
protected void onStop() {
    super.onStop();
    Intent i = new Intent(this, backService.class);
    stopService(i);
}

@Override
protected void onDestroy(){
    super.onDestroy();
    Intent i = new Intent(this, backService.class);
    stopService(i);
}
    }

当我按下主页键并在我们切换其他活动时继续播放音乐时,如何停止音乐 TIA

2 个答案:

答案 0 :(得分:1)

当您将一个活动转到另一个活动然后<时,请删除活动中的 onStop()方法中的 stopService(i) 将调用strong> onStop()方法,这就是您的服务被杀的原因。

如果您想按主页按钮暂停或停止音乐,然后将 ComponentCallbacks2 界面实现为活动,就像这样

 @Override
public void onTrimMemory(final int level) {
    if (level == ComponentCallbacks2.TRIM_MEMORY_UI_HIDDEN) {
        if(mService != null){
            mService.pauseMusic();
        }
    }
}

答案 1 :(得分:0)

尝试在

中停止服务
@Override
public void onPause()
{
    super.onPause();
    // Check if app is in foreground
    if(!isAppOnForeground(context))
    {
        stop music here 
     }
}
下面的

是检查应用程序是否在前台的方法。只需在此处替换您的包"your package name here";

public static boolean isAppOnForeground(Context context)
{
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null) {
return false;
}
final String packageName = "your package name here";
for (ActivityManager.RunningAppProcessInfo appProcess : appProcesses) {
if (appProcess.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_FOREGROUND && appProcess.processName.equals(packageName)) {
return true;
}
}
return false;
}