Возможно, название не достаточно явное, позвольте мне объяснить.
Я работаю над уже существующим кодом, приложением 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?
Спасибо