2012-05-23 3 views
0

나는 여러 가지 활동이있는 안드로이드 앱이 있습니다. 첫 번째 주요 활동은 미디어 플레이어를 사용하여 배경 음악을 시작합니다. 앱이 forground 일 때이 음악을 계속 재생하려면 어떻게해야합니까? onpause 메서드에서 앱을 중지하려고 시도했지만 onresume 메소드에서 시작했지만 모든 작업에서 동일한 코드를 사용하는 것이 번거로웠습니다. 고마워요모든 활동을 통해 미디어 플레이어를 유지하는 방법

+0

서비스를 사용 하시겠습니까? –

답변

1

응용 프로그램이 포 그라운드가 될 때까지 재생하려면 onPause에서 미디어 플레이어를 중지 할 수 없습니다. 그 이유는 액티비티 A에서 액티비티 B로 이동하면 액티비티 A의 onPause와 액티비티 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; 
} 

는,이 함수를 호출하는 기본 활동을 작성하고 자신의 onPause()와 onResume() 메서드를 재정의하려면 확장 활동 대신 기본 활동.

희망이 도움이됩니다.

Shraddha

+0

감사합니다. 나는 그 제안을 좋아한다. super.onResume 이후 또는 이후에 onPause/onResume 메서드에서이 메서드를 호출합니까? – Snake

+1

super로 호출해야합니다. 마찬가지로 @Override public void onPause() { super.onPause(); if (ApplicationStateUtils.isApplicationBroughtToBackground (TabGroupActivity.isis)) { ApplicationStateUtils.setAppBroughtToFront (true); } else { ApplicationStateUtils.setAppBroughtToFront (false); } } – Shraddha

1

미디어 플레이어를 만든 서비스에 바인딩해야합니다! 서비스에 대한 andriod 개발자 페이지를 확인할 수 있습니다 : http://developer.android.com/reference/android/app/Service.html

일단 미디어 플레이어가 서비스에 바인딩되면 어떤 활동이 활성인지는 중요하지 않습니다.

+0

나는 서비스없이 들으려고했는데, 앱을 배경으로 가져 가면 (잠금으로 말하면) 여전히 음악을 멈출 수 없다. – Snake

관련 문제