Фоновая музыка 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); 

Если вы хотите играть только фоновую музыку только для своего приложения, то воспроизводите ее в 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() } 
  • Как получить Bitmap от Uri?
  • Камера: функция setDisplayOrientation не работает для Samsung Galaxy ACE с Android 2.3.6
  • открывать карты Google через намерение для конкретного местоположения в android
  • Приложение Android запоминает свои данные после удаления и переустановки
  • Центр Выровнять название в панели действий, используя стили в android.
  • захват изображений с помощью средства MediaStore.ACTION_IMAGE_CAPTURE в Android
  • Ошибка: выполнение выполнено для задачи ': app: transformClassesWithDexForDebug'
  • Как вы устанавливаете frameworks Google (Play, Accounts и т. Д.) На виртуальном устройстве Genymotion?
  • Как отображать одноразовый экран приветствия?
  • Как приложение может обнаружить, что оно будет удалено?
  • Как использовать Android-камеру или Camera2 API для поддержки старых и новых версий API без заметок?
  • Interesting Posts

    Настройка фоновых задач для автозапуска в качестве администратора

    Как отключить кеширование на стороне клиента и прокси в ASP.NET MVC?

    О поле «_id» в Android SQLite

    Какова наилучшая практика для округления поплавка до 2 десятичных знаков?

    Файлы Word в PDF без потери качества изображения

    WPF: как динамически добавлять элементы управления в динамически созданное окно WPF

    Учитывая аудиоstream, найдите, когда дверь хлопает (расчет уровня звукового давления?)

    Как преобразовать шестнадцатеричную строку в шестнадцатеричный номер

    Как украсть штрихи от UIScrollView?

    visual c ++: # включить файлы из других проектов в одном решении

    Как получить имя Wi-Fi-сети из Android с помощью API Android?

    Запретить навигацию веб-страницы с помощью JavaScript

    Кабели HDMI для VGA действительно работают так, как рекламируются?

    Как получить дату без времени в Java?

    Бесплатное программное обеспечение для видеонаблюдения с использованием веб-камеры, работающей в Windows

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