【问题标题】:how to keep mediaplayer playing through all activities如何让媒体播放器在所有活动中播放
【发布时间】:2012-05-23 13:26:26
【问题描述】:

我有一个包含多个活动的 Android 应用 第一个主要活动使用媒体播放器启动背景音乐。当应用程序处于前台时,如何使此音乐继续播放 我试图在 onpause 方法上停止应用程序并在 onresume 方法上启动它,但是在每个活动中使用相同的代码很麻烦 非常感谢

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您希望媒体播放器在应用程序处于前台之前播放,您无法在 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。

    希望对你有所帮助。

    沙拉达

    【讨论】:

    • 谢谢。我喜欢这个建议。我是在 super.onResume 之后还是之前在 onPause/onResume 方法上调用这些方法?
    • 你应该在 super 之后调用它。比如,@Override public void onPause() { super.onPause(); if (ApplicationStateUtils.isApplicationBroughtToBackground(TabGroupActivity.this)) { ApplicationStateUtils.setAppBroughtToFront(true); } else { ApplicationStateUtils.setAppBroughtToFront(false); } }
    【解决方案2】:

    一旦创建了媒体播放器,您就应该将其绑定到服务!您可以在安卓开发者页面上查看服务:http://developer.android.com/reference/android/app/Service.html

    一旦媒体播放器绑定到服务,哪个活动处于活动状态都无关紧要。

    【讨论】:

    • 我想在没有服务的情况下这样做,因为我听说有服务,如果应用程序被带到后台(比如通过锁定),那么我仍然无法停止音乐
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多