【发布时间】:2023-01-20 03:49:30
【问题描述】:
我如何从我的回收站控制查看 MediaBrowserServiceCompat 中的播放和暂停状态?
【问题讨论】:
标签: android android-recyclerview exoplayer mutablelivedata mediabrowserservicecompat
我如何从我的回收站控制查看 MediaBrowserServiceCompat 中的播放和暂停状态?
【问题讨论】:
标签: android android-recyclerview exoplayer mutablelivedata mediabrowserservicecompat
如果 uri 与上一次点击不同,我希望它只添加一个新的 QueueItem
如果是相同的。如果它已经开始播放它应该继续播放但是如果它已经播放完并且它是相同的 uri 它应该倒带但只需点击一下
所以我这样做了
root.binding.playChat.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//root.setIsRecyclable(false);
root.binding.textView40.setTag(position);
Gson gson = new GsonBuilder().create();
ChatMessageViewModel chat = getCurrentList().get(position);
String attachments = gson.toJson(chat.getAttachments());
Type collectionType = new TypeToken<Collection<Attachments>>() {}.getType();
Collection<Attachments> enums = gson.fromJson(attachments, collectionType);
for (Attachments a : enums) {String path = a.getPath();
try {
currentPlay = root.binding.playChat;
seekBar = root.binding.sb;
textView = root.binding.textView40;
String preUrl = "";
String newURL = domain + path + "?apikey=" + encodeValue(apikey) + "&auth=" + auth + "&secret=" + encodeValue(secret);
//if (preUrl.isEmpty()){
String oldUrl = preUrl;
if (!newURL.equals(url)) {
url = newURL;
Uri myUri = Uri.parse(url);
voicemailViewModel.addURItoQueueChat(MediaControllerCompat.getMediaController(ChatActivity.this), myUri);
//root.binding.textView40.setText((Utils.formatLongMilliSeconds(longProgress)));
Log.v("cptv", String.valueOf(longProgress));
initReceiver();
changePlayback();
}else {
MediaControllerCompat.TransportControls transportControls = MediaControllerCompat.getMediaController(ChatActivity.this).getTransportControls();
int pbState = MediaControllerCompat.getMediaController(ChatActivity.this).getPlaybackState().getState();
if (pbState == PlaybackStateCompat.STATE_PLAYING) {changePlayback();
}else if (pbState == PlaybackStateCompat.STATE_PAUSED ) {changePlayback();
}else {
VoicemailPlayingService.getLiveState().observe(ChatActivity.this, new Observer<Integer>() {
@Override
public void onChanged(Integer integer) {
if (integer == ExoPlayer.STATE_ENDED){
MediaControllerCompat.getMediaController(ChatActivity.this).getTransportControls().seekTo(0);
MediaControllerCompat.getMediaController(ChatActivity.this).getTransportControls().pause();
currentPlay.setImageResource(R.drawable.ic_outline_play_arrow_24);}
}
});
}
}
} catch (Exception e) {}
}
}
changePlayback() 是这样的
void changePlayback() {
int pbState = MediaControllerCompat.getMediaController(ChatActivity.this).getPlaybackState().getState();
if (pbState == PlaybackStateCompat.STATE_PLAYING) {
MediaControllerCompat.getMediaController(this).getTransportControls().pause();
currentPlay.setImageResource(R.drawable.ic_outline_play_arrow_24);
} else if (pbState == PlaybackStateCompat.STATE_PAUSED || pbState ==0 ){
MediaControllerCompat.getMediaController(this).getTransportControls().play();
currentPlay.setImageResource(R.drawable.ic_baseline_pause_24);}
}
【讨论】: