0

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

Как я могу проверить статус медиаплеера в своем MainActivity? так что я могу внести соответствующие изменения в пользовательский интерфейс!

Ниже представлен мой код обслуживания, который реализует медиаплеер.

public class MyService extends Service implements MediaPlayer.OnPreparedListener { 

    private static final String ACTION_PLAY = "com.demo.tron.mediaplayerasaservice.PLAY"; 
    private static final String ACTION_STOP = "com.demo.tron.mediaplayerasaservice.STOP"; 

    public MediaPlayer mMediaPlayer = null; 

    public int onStartCommand(Intent intent, int flags, int startId) { 

     if (intent.getAction().equals(ACTION_PLAY)) { 
      mMediaPlayer = new MediaPlayer(); // initialize it here 
      mMediaPlayer.setOnPreparedListener(this); 
      try{ 
       mMediaPlayer.setDataSource("http://mp3channels.webradio.antenne.de:80/antenne"); 
      } 
      catch (IOException e) 
      { 
       Toast.makeText(this, e.getMessage(), Toast.LENGTH_SHORT).show(); 
      } 
      mMediaPlayer.prepareAsync(); // prepare async to not block main thread 
     } 
     else if (intent.getAction().equals(ACTION_STOP)){ 
      if (mMediaPlayer.isPlaying()) 
      { 
       mMediaPlayer.stop(); 
       mMediaPlayer.reset(); 
      } 
     } 

     return START_STICKY; 
    } 

    @Nullable 
    @Override 
    public IBinder onBind(Intent intent) { 
     return null; 
    } 

    /** Called when MediaPlayer is ready */ 
    @Override 
    public void onPrepared(MediaPlayer player) { 
     mMediaPlayer.start(); 
    } 
} 

Это код, который вызывает службу медиа-плеер через Основной вид деятельности:

button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent=new Intent(MainActivity.this,MyService.class); 
       intent.setAction("com.demo.tron.mediaplayerasaservice.PLAY"); 
       startService(intent); 
      } 
     }); 

ответ

1

Вы должны проверить, если служба уже запущена или нет, а затем принять соответствующие меры:

private boolean isServiceRunning(Class<?> serviceClass) { 
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); 
    for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) { 
     if (serviceClass.getName().equals(service.service.getClassName())) { 
      return true; 
     } 
    } 
    return false; 
} 

Затем вызов метода isServiceRunning в любом месте:

isServiceRunning(YourServiceClass.class) 

Определите класс PlayerConstants, чтобы отслеживать состояние игрока. Он будет содержать все статические переменные:

public class PlayerConstants { 
    //List of Songs 
    public static ArrayList<MediaItem> SONGS_LIST = new ArrayList<MediaItem>(); 
    //song number which is playing right now from SONGS_LIST 
    public static int SONG_NUMBER = 0; 
    //song is playing or paused 
    public static boolean SONG_PAUSED = true; 
} 

Теперь вам нужно проверить, если служба запущена, если работает, песня может быть приостановлена ​​или уже играет, вы можете получить паузу состояние от PlayerConstants, иначе песня играет. Если служба не запущена, воспроизведение композиции не выполняется. Соответственно, вы можете управлять своим пользовательским интерфейсом.

+0

Ваш способ узнать, активен ли сервис, не так хорош. Также, что после установки констант, как я могу заставить MainActivity знать, работает ли плеер? Нужно ли мне помещать какой-то обработчик, который обновляется каждую секунду. – IteratioN7T

+0

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

+0

Да, также я обновил ваш anwser – IteratioN7T

Смежные вопросы