Nano Hash - криптовалюты, майнинг, программирование

Медиаплеер не остановит воспроизведение аудиофайла после того, как трансляция намерена остановить его

Я использую класс Android MediaPlayer для воспроизведения mp3-файла из работающего класса службы. Я хотел остановить воспроизведение музыкального проигрывателя, если пользователь перестанет просматривать любое из пяти действий.

Я попробовал это, используя приведенный здесь код, чтобы отправить широковещательное намерение службе, которая содержит MediaPlayer. Таким образом, когда приемник вещания внутри службы получает это намерение, он вызывает метод player.pause(), чтобы остановить воспроизведение музыки.

Однако это не работает. Я запустил плеер во время просмотра одного из действий, а затем вышел из приложения и просмотрел какое-то другое приложение, например приложение календаря Android. Музыка не останавливается и продолжает играть.

Любые идеи о том, как решить эту проблему?

   public class Monitor extends Application {

  @Override
   public void onCreate(){
   super.onCreate();

   if(activityVisible==false){
        Intent intent = new Intent();
        intent.setAction("com.sample.test");
        sendBroadcast(intent);
   }

   }


 public static boolean isActivityVisible() {
        return activityVisible;
      }  

      public static void activityResumed() {
        activityVisible = true;
      }

      public static void activityPaused() {
        activityVisible = false;

      }

      private static boolean activityVisible;

   }

И вот что я вложил в каждое из остальных 5 действий;

  @Override
  protected void onResume() {
    super.onResume();
    Monitior.activityResumed();
  }

  @Override
  protected void onPause() {
     super.onPause();
    Monitor.activityPaused();
  }

Ответы:


1

onCreate в классе Application не вызывается при создании каждого из ваших действий. Это то, что вы намеревались?

Таким образом, ваш монитор изменит activityVisible на false, но из кода, который вы разместили, ничего не действует на этот boolean.

Одним из решений является создание MonitorActivity и расширение всех ваших действий. Затем в onCreate из MonitorActivity вы отправите свою трансляцию для запуска службы, а в onPause остановите службу. Да, это приведет к паузе между действиями, поэтому у вас может быть 3-секундный предохранитель о том, должна ли служба действительно останавливаться.

19.12.2012
  • это звучит хорошо, с MonitorActivity, который расширяет Activity, а все остальные действия расширяют действие Monitor. так что использование действия, которое расширяет приложение, бесполезно в этой ситуации? 19.12.2012
  • @Kevik, да, я не вижу его использования, класс приложения находится за пределами жизненного цикла активности. Это полезно для глобальных ссылок, но не для управления жизненным циклом. 19.12.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..