Как добавить фоновую музыку для всех видов деятельности в Android? [Дубликат]

Вызовы к службам HTTPS с одного из наших серверов также бросали сообщение «Невозможно прочитать данные из транспортного соединения: существующее соединение было принудительно закрыто». Однако HTTP-сервис работал нормально. Использовал Wireshark, чтобы убедиться, что это был отказ от подтверждения TLS. Закончилось то, что набор шифров на сервере необходимо обновить.

7
задан Attaullah 19 May 2015 в 16:59
поделиться

8 ответов

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

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

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

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

UPDATE:

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

public class BackgroundSound extends AsyncTask<Void, Void, Void> {

    @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);
}

Это будет работать.

24
ответ дан Nick Cardoso 23 August 2018 в 01:44
поделиться
  • 1
    Можете ли вы исправить мой код, который делает то, что вы сказали? – Zookey 28 October 2011 в 17:30
  • 2
    Сделаю теперь .. Я редактирую через несколько минут. – Jong 28 October 2011 в 17:46
  • 3
    Только один вопрос. Нужно ли создавать новый класс BackgroundSound? или поместить это в класс BackgroundSoundService, или поместить это в мой основной класс активности? – Zookey 28 October 2011 в 18:17
  • 4
    В вашем классе активности, где вы хотите воспроизвести звуки. Это должен быть внутренний класс. Не забудьте изменить & quot; YourActivity & quot; (В коде) к названию вашей деятельности. – Jong 28 October 2011 в 18:20
  • 5
    Я проверил это. Он воспроизводит звуки, когда я запускаю приложение, но проблема в том, что когда я нажимаю кнопку HOME, она все еще играет музыку, пока приложение закрыто? – Zookey 28 October 2011 в 18:34

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

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

Здесь немного строк на странице разработчиков Android о AsyncTasks

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

< / blockquote>

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

1
ответ дан aks 23 August 2018 в 01:44
поделиться

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

class BackgroundSound : AsyncTask<Context, Void?, Void?>() {

    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
    }
}

Вы можете использовать этот класс в своей Activity так:

private var backgroundSound: BackgroundSound? = null

override fun onResume() {
    super.onResume()
    backgroundSound = BackgroundSound()
    backgroundSound!!.execute(this)
}

override fun onPause() {
    backgroundSound?.cancel(true)
    super.onPause()
}
0
ответ дан Anthony Cannon 23 August 2018 в 01:44
поделиться

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

0
ответ дан drtom 23 August 2018 в 01:44
поделиться

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

@Override
protected void onStop() {
    super.onStop();
    ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningTaskInfo> 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();
        }
    }
}
0
ответ дан Janak Rajyaguru 23 August 2018 в 01:44
поделиться

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

0
ответ дан Srinivas 23 August 2018 в 01:44
поделиться

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

0
ответ дан trashkalmar 23 August 2018 в 01:44
поделиться

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

. exit (0);

это остановит ваш медиаплеер при нажатии кнопки возврата / дома или закрытия приложения

0
ответ дан user 23 August 2018 в 01:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: