【发布时间】:2012-05-23 13:26:26
【问题描述】:
我有一个包含多个活动的 Android 应用 第一个主要活动使用媒体播放器启动背景音乐。当应用程序处于前台时,如何使此音乐继续播放 我试图在 onpause 方法上停止应用程序并在 onresume 方法上启动它,但是在每个活动中使用相同的代码很麻烦 非常感谢
【问题讨论】:
标签: android
我有一个包含多个活动的 Android 应用 第一个主要活动使用媒体播放器启动背景音乐。当应用程序处于前台时,如何使此音乐继续播放 我试图在 onpause 方法上停止应用程序并在 onresume 方法上启动它,但是在每个活动中使用相同的代码很麻烦 非常感谢
【问题讨论】:
标签: android
如果您希望媒体播放器在应用程序处于前台之前播放,您无法在 onPause 中停止它。原因是如果从Activity A过渡到Activity B,会调用Activity A的onPause和Activity B的onResume/onCreate。为了实现你想要实现的东西,你需要检查应用程序何时进入后台。为此,请使用以下函数:
public boolean isAppOnForeground(final Context context)
{
final ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
if (appProcesses == null)
{
return false;
}
final String packageName = context.getPackageName();
for (final RunningAppProcessInfo appProcess : appProcesses)
{
if ((appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND) && appProcess.processName.equals(packageName))
{
return true;
}
}
return false;
}
对于背景:
public static boolean isApplicationBroughtToBackground(final Context context)
{
final ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
final List<RunningTaskInfo> tasks = am.getRunningTasks(1);
if (!tasks.isEmpty())
{
final ComponentName topActivity = tasks.get(0).topActivity;
if (!topActivity.getPackageName().equals(context.getPackageName()))
{
return true;
}
}
return false;
}
要调用这个函数,创建一个 Base Activity 并覆盖它们的 onPause() 和 onResume() 方法,扩展 Base Activity 来代替 Activity。
希望对你有所帮助。
沙拉达
【讨论】:
一旦创建了媒体播放器,您就应该将其绑定到服务!您可以在安卓开发者页面上查看服务:http://developer.android.com/reference/android/app/Service.html
一旦媒体播放器绑定到服务,哪个活动处于活动状态都无关紧要。
【讨论】: