Странное поведение метода onPlayFr omMediaId () MediaControllerCompat
Я работаю с сервисом, который расширяет MediaBrowserServiceCompat
, а также имеет MediaSessionCompat.Callback()
с переопределенными методами, в том числе onPlayFromMediaId()
,
Внутри фрагмента, который имеет обзор повторного вызова при щелчке элемента просмотра повторного вызова, вызывается следующий код. По изображению видно, что mediaId
так же как songBundle
имеют значения и передаются в onPlayFromMediaId()
метод.
Странная вещь в классе Service, где playFromMediaId()
метод переопределен, он получает только значение для строковой переменной mediaId
в то время как songBundle
волшебным образом становится пустым. (Примечание: ключ, используемый для сдачи и получения посылки, тоже один и тот же. songsVO
это POJO, который реализует Parcelable
интерфейс.)
Помимо этого еще одна интересная вещь, которую я заметил, когда я возвращаюсь к фрагменту, который называется onPlayFromMediaId()
позже, после того, как он был выполнен, и проверьте значения каждой переменной, кроме mediaId
любая другая переменная становится нулевой.
RecyclerAdapter class
class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.layout_song_item, parent, false);
return new ViewHolder(itemView);
}
@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// songPicked(position);
songsVO=songsVOArrayList.get(position);
mediaId=songsVO.getFilePath();
songBundle=new Bundle();
songBundle.putParcelable("song",songsVO);
//
MediaControllerCompat.getMediaController(getActivity()).getTransportControls().playFromMediaId(mediaId, songBundle);
MediaControllerCompat.getMediaController(getActivity()).getTransportControls().play();
currentState = STATE_PLAYING;
holder.imageView.setImageBitmap(songsVOArrayList.get(position).getAlbumArt());
holder.title.setText(songsVOArrayList.get(position).getTitle());
holder.artist.setText(songsVOArrayList.get(position).getArtist());
holder.duration.setText(songsVOArrayList.get(position).getDuration());
}
@Override
public int getItemCount() {
return songsVOArrayList.size();
}
class ViewHolder extends RecyclerView.ViewHolder {
CardView cardView;
ImageView imageView;
TextView title, artist, duration;
public ViewHolder(View itemView) {
super(itemView);
cardView = (CardView) itemView.findViewById(R.id.layout_song_item);
imageView = (ImageView) itemView.findViewById(R.id.img_albumart);
title = (TextView) itemView.findViewById(R.id.txt_title);
artist = (TextView) itemView.findViewById(R.id.txt_artist);
duration = (TextView) itemView.findViewById(R.id.txt_duration);
}
}
}
TLDR- onPlayFromMediaId(String, Bundle)
передает только строковую переменную, в то время как Bundle передается пустым.
Ссылка- это руководство