2012-05-23 3 views
0

У меня есть приложение для Android, которое имеет mutliple действия Первое основное действие начинается с фоновой музыки с использованием медиаплеера. Как я могу заставить эту музыку продолжать играть, когда приложение im forground Я попытался остановить приложение по методу onpause и начал его по методу onresume, но его громоздкий, чтобы иметь одинаковый код во всех действиях. Большое спасибоКак сохранить mediaplayer, играя во всех действиях

+0

использовать услугу может быть? –

ответ

1

Вы не можете остановить Media Player в onPause, если хотите, чтобы он воспроизводился до тех пор, пока приложение не будет на переднем плане. Причина в том, что если вы переходите из Activity A в Activity B, вызывается onPause активности A и onResume/onCreate Activity B. Чтобы добиться того, что вы хотите реализовать, вам нужно будет проверить, когда приложение будет в фоновом режиме. Для этого используются следующие функции:

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

Спасибо. Мне нравится предложение. Я вызываю эти методы в методах onPause/onResume после super.onResume или до – Snake

+1

Вы должны называть это после супер. Например, @Override public void onPause() { super.onPause(); if (ApplicationStateUtils.isApplicationBroughtToBackground (TabGroupActivity.this)) { ApplicationStateUtils.setAppBroughtToFront (true); } else { ApplicationStateUtils.setAppBroughtToFront (false); } } – Shraddha

1

вы должны привязать медиаплеер к сети после его создания! Вы можете проверить страницу разработчиков andriod для служб: http://developer.android.com/reference/android/app/Service.html

Как только медиаплатель связан с сервисом, не имеет значения, какая активность активна.

+0

Я хотел сделать это без обслуживания, как я слышал с сервисом, если приложение выведено на задний план (скажем, путем блокировки), то я все равно не смогу остановить музыку. – Snake