Как связать мой существующий MediaPlayer с уведомлением на экране блокировки - PullRequest
0 голосов
/ 11 мая 2018

Возможно, название не достаточно явное, позвольте мне объяснить.

Я работаю над уже существующим кодом, приложением Java для Android. Реальное приложение имеет медиаплеер, воспроизводящий аудиопоток, с только кнопкой воспроизведения / паузы в макете. Проигрывается инициализируется и используется в деятельности. Когда телефон заблокирован, поток продолжает воспроизводиться, но при этом не отображаются уведомления со следующими предыдущими кнопками и т. Д.

Использование этого учебника Мне удалось отобразить уведомление на экране блокировки и в области уведомлений, когда я вызываю эту услугу из действия:

Intent intent = new Intent(getApplicationContext(), MediaPlayerService.class);
intent.setAction(MediaPlayerService.ACTION_PAUSE);
startService(intent);

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

Так что мне интересно, лучше ли:

  • Используйте созданный мной новый сервис и попытайтесь связать его с существующим сеансом
  • Отключить предыдущий медиаплеер от действия и обработать все мультимедийные объекты на службе
  • Сохранять всю обработку мультимедиа в упражнении.

Я не очень знаком с обработкой медиаданных в Android.

Вот предварительный просмотр кода:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_exercices);

    setFinishOnTouchOutside(false);
    mContext = this;


    // Init of MediaSession
    //mSession = new MediaSessionCompat(this, "MusicService");
    //mSession.setCallback(new MediaSessionCallback());
    //mSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS | MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
    //setSessionToken(mSession.getSessionToken());


    mAudioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
    mRemoteControlResponder = new ComponentName(getPackageName(),
            RemoteControlReceiver.class.getName());

    mStateBuilder = new PlaybackStateCompat.Builder()
                    .setActions(
                            PlaybackStateCompat.ACTION_PLAY |
                                    PlaybackStateCompat.ACTION_PLAY_PAUSE);

    initializeViews();
    initializeActions();
}


 public void initializeActions() {


        recyclerExercisesView.setLayoutManager(new LinearLayoutManager(mContext));
        pAdapterExercise = new ExercisesPlayerAdapter(mContext, allExercisesList, isGuest, new ExercisesPlayerAdapter.RecyclerItemClickListener() {
            @Override
            public void onClickListener(Exercise exercice, int position) {
                //Toast.makeText(DetailsSceanceActivity.this, exercice.getPath(), Toast.LENGTH_SHORT).show();
                iv_play.setEnabled(true);
                seekBar_progress.setEnabled(true);

                if (!chronoLaunch && firstLaunch) {
                    startChrono();
                    startSensors();
                }
                firstLaunch = false;
                changeSelectedExercice(position);
                prepareExercise(exercice);
            }
        });
        recyclerExercisesView.setAdapter(pAdapterExercise);


        mMediaController = new MediaController(this);


        Intent intent = new Intent(getApplicationContext(), MediaPlayerService.class);
        intent.setAction(MediaPlayerService.ACTION_PAUSE);
        startService(intent);

        // inint mediaplayer
        mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
            @Override
            public void onPrepared(MediaPlayer mp) {
                // play song
                togglePlay(mp);
                //mMediaController.setMediaPlayer(this);
            }
        });

 }

Я также видел несколько примеров с MediaSessionCompat. Лучше использовать MediaSession или MediaSessionCompat?

Спасибо

...