也许标题不够明确,让我解释一下。
我正在处理一个已经存在的代码,Java for Android 应用程序。实际的应用程序有一个播放音频流的媒体播放器,布局中只有一个播放/暂停按钮。play 被初始化并在活动中使用。当手机被锁定时,流继续播放,但没有通知显示下一个上一个等按钮。
使用本教程,当我从活动中调用此服务时,我设法在锁定屏幕和通知区域上显示通知:
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?
谢谢