MediaControllerCompat的onPlayFromMediaId()方法的奇怪行为

我正在使用扩展MediaBrowserServiceCompat的服务,并且还使用MediaSessionCompat.Callback()以及包含onPlayFromMediaId()的重写方法。

在单击recyclelerview项目时具有recyclelerview的片段内部,将调用以下代码。 从图像中可以清楚地看出, mediaIdsongBundle都有值,并且被传递给onPlayFromMediaId()方法。

在此处输入图像描述

奇怪的是,在重写playFromMediaId()方法的Service类中,它只接收字符串variablesmediaId值,而songBundle神奇地变为空。 (注意 – 用于放置和获取parcelable的键也是相同的。可分配的songsVO是一个实现songsVO接口的POJO。)

在此处输入图像描述

除了这个我注意到的另一个有趣的事情是,当我返回到已经执行后调用onPlayFromMediaId()的片段并检查每个variables的值,除了mediaId之外,每个其他variables都变为null。

在此处输入图像描述 在此处输入图像描述

RecyclerAdapter类

  class RecyclerAdapter extends RecyclerView.Adapter { @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)仅传递Stringvariables,而Bundle传递为空。

参考 – 本教程