Фоновая музыка Android

Okey, это моя проблема. У меня есть один сервисный class, где Ive удалось создать медиаплеер для воспроизведения музыки в фоновом режиме все время. Вот код:

package com.test.brzoracunanje; import android.app.Service; import android.content.Intent; import android.media.MediaPlayer; import android.os.IBinder; public class BackgroundSoundService extends Service { private static final String TAG = null; MediaPlayer player; public IBinder onBind(Intent arg0) { return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); player = MediaPlayer.create(this, R.raw.test_cbr); player.setLooping(true); // Set looping player.setVolume(100,100); player.start(); } @Override public void onStart(Intent intent, int startId) { super.onStart(intent, startId); } public void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); } protected void onNewIntent() { player.pause(); } } 

Но теперь у меня проблемы, когда я нажимаю кнопку HOME или BACK . Он по-прежнему играет музыку. Кто-нибудь знает, как решить эту проблему?

И вот код, как я называю эту услугу на classе, где я хочу играть музыку;

  Intent svc=new Intent(this, BackgroundSoundService.class); startService(svc); 

8 Solutions collect form web for “Фоновая музыка Android”

Если вы хотите играть только фоновую музыку только для своего приложения, то воспроизводите ее в streamе, запущенном из вашего приложения / используйте class AsyncTask, чтобы сделать это за вас.

Концепция услуг заключается в том, чтобы работать в фоновом режиме; По умолчанию, значение обычно происходит, когда пользовательский интерфейс приложения НЕ ВИДИМО . Правда, его можно использовать так же, как и у вас (если вы его остановите), но его просто не правильно, и он потребляет ресурсы, которые вы не должны использовать.

Если вы хотите отображать задачи на фоне своей активности , используйте AsyncTask.

Кстати, onStart устарел. Когда вы используете сервисы, реализуйте onStartCommand .

ОБНОВИТЬ:

Я думаю, этот код будет работать для вас. Добавьте этот class (включено в ваш class активности).

 public class BackgroundSound extends AsyncTask { @Override protected Void doInBackground(Void... params) { MediaPlayer player = MediaPlayer.create(YourActivity.this, R.raw.test_cbr); player.setLooping(true); // Set looping player.setVolume(1.0f, 1.0f); player.start(); return null; } } 

Теперь, чтобы контролировать музыку, сохраните объект BackgroundSound, а не создавайте его анонимно. Объявите его как поле в своей деятельности:

 BackgroundSound mBackgroundSound = new BackgroundSound(); 

В методе onResume вашей деятельности запустите его:

 public void onResume() { super.onResume(); mBackgroundSound.execute(null); } 

И в методе onPause вашей активности остановите его:

 public void onPause() { super.onPause(); mBackgroundSound.cancel(true); } 

Это сработает.

AsyncTasks хороши только для очень коротких клипов, но если это музыкальный файл, вы столкнетесь с такими проблемами, как:

  • Вы не сможете останавливать / приостанавливать музыку посередине. Для меня это настоящая проблема.

Вот несколько строк на странице разработчиков Android о AsyncTasks

AsyncTasks в идеале следует использовать для коротких операций (максимум за несколько секунд). Если вам нужно поддерживать streamи в течение длительного периода времени, настоятельно рекомендуется использовать различные API-интерфейсы, предоставляемые пакетом java.util.concurrent, например Исполнитель, ThreadPoolExecutor и FutureTask.

Поэтому в настоящее время я просматриваю другие варианты и обновляю ответ, как только найду решение.

Конечно, ваш сервис работает в фоновом режиме, и вы должны остановить его вручную из своей активности, когда он переходит на задний план.

да, u должен остановить службу, когда u нажмите кнопку «домой». В методе переопределения OnPause () {} u должен остановить музыкальную службу. И внутри службы в методе OnDestroy () u остановите медиаплеер. Итак, теперь нажатие домашних вызовов onPause и onPause () -> останавливает службу, а OnDestroy выполняется в сервисе, а в odestroy () медиаплеер останавливается, и проблема ur устранена.

напишите ниже код в методе остановки:

система. Выход (0);

это прекратит ваш медиаплеер, когда вы нажмете кнопку «Назад / домой» или закройте приложение

Попробуйте сделать так, чтобы фоновая музыка в режиме HOME или BACK была нажата.

 @Override protected void onStop() { super.onStop(); ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List services = activityManager .getRunningTasks(Integer.MAX_VALUE); boolean isActivityFound = false; if (services.get(0).topActivity.getPackageName().toString() .equalsIgnoreCase(getPackageName().toString())) { isActivityFound = true; // Activity belongs to your app is in foreground. } if (!isActivityFound) { if (player != null && player.isPlaying()) { player.release(); } } } 

Попробуйте вставить player.stop () в метод onDestroy (). Это должно помочь.

(Котлин) . Ответ Sadly Jong для меня не сработал, у меня было несколько ошибок, в том числе: MediaPlayer finalized without being released и задержки в остановке и запуске звука. Поэтому я опубликую способ, которым я это сделал, на всякий случай, если у кого-то другая проблема. Моя реализация BackgroundSound прежнему использует AsyncTask и MediaPlayer, но это не-вложенный class.

 class BackgroundSound : AsyncTask() { override fun doInBackground(vararg params: Context): Void? { val player = MediaPlayer.create(params[0], R.raw.msc_background) player.isLooping = true player.start() while (!isCancelled) { } player.stop() player.release() return null } } 

Вы можете использовать этот class в своей деятельности так:

 private var backgroundSound: BackgroundSound? = null override fun onResume() { super.onResume() backgroundSound = BackgroundSound() backgroundSound!!.execute(this) } override fun onPause() { backgroundSound?.cancel(true) super.onPause() } 
  • Заполнение ListView с помощью ArrayList?
  • Recyclerview Изменение элементов во время прокрутки
  • Получение координат представления относительно корневого макета
  • Изменить цвет круга переключателя - Android
  • Шаги по созданию файла расширения APK
  • Отправка данных из вложенных fragmentов в родительский fragment
  • как повернуть bitmap на 90 gradleусов
  • Как получить токен доступа после входа пользователя из Gmail в Android?
  • Как отличается атрибут android: onClick XML от setOnClickListener?
  • Создать новый проект на Android, Ошибка: Студия Неизвестный хост 'services.gradle.org'
  • Android Studio Exclude Class из сборки?
  • Interesting Posts

    Как установить другой метод ввода для каждого окна приложения

    Сделать упаковщик использовать разные драгоценные камни для разных платформ

    Слишком много дискового ввода-вывода в Windows

    В чем разница между chkdsk / f и chkdsk / r?

    Получение значения RGB из-под курсора мыши

    В JDK 1.8 отображается искажение качания, исправлено в JDK 1.7

    Диск с хафонами / наушниками

    Android NDK: ссылка с использованием предварительно скомпилированной статической библиотеки

    Может ли Selenium взаимодействовать с существующим сеансом браузера?

    Перемещение файлов PDF в родительскую папку из подпапки с именами переменных

    Ошибка узла: SyntaxError: неожиданный импорт маркера

    Мощность USB 7 USB теряется через несколько секунд / минут

    VBA проверяет, существует ли файл

    При использовании SASS, как я могу импортировать файл из другого каталога?

    SimpleDateFormat parse теряет часовой пояс

    Давайте будем гением компьютера.