У меня есть приложение для Android, которое имеет mutliple действия Первое основное действие начинается с фоновой музыки с использованием медиаплеера. Как я могу заставить эту музыку продолжать играть, когда приложение im forground Я попытался остановить приложение по методу onpause и начал его по методу onresume, но его громоздкий, чтобы иметь одинаковый код во всех действиях. Большое спасибоКак сохранить mediaplayer, играя во всех действиях
ответ
Вы не можете остановить 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
Спасибо. Мне нравится предложение. Я вызываю эти методы в методах onPause/onResume после super.onResume или до – Snake
Вы должны называть это после супер. Например, @Override public void onPause() { super.onPause(); if (ApplicationStateUtils.isApplicationBroughtToBackground (TabGroupActivity.this)) { ApplicationStateUtils.setAppBroughtToFront (true); } else { ApplicationStateUtils.setAppBroughtToFront (false); } } – Shraddha
вы должны привязать медиаплеер к сети после его создания! Вы можете проверить страницу разработчиков andriod для служб: http://developer.android.com/reference/android/app/Service.html
Как только медиаплатель связан с сервисом, не имеет значения, какая активность активна.
Я хотел сделать это без обслуживания, как я слышал с сервисом, если приложение выведено на задний план (скажем, путем блокировки), то я все равно не смогу остановить музыку. – Snake
использовать услугу может быть? –