Dar*_*kin 7 android android-service android-mediaplayer mediabrowserservicecompat
我正在使用一种扩展的服务MediaBrowserServiceCompat,并且还MediaSessionCompat.Callback()使用了它的重写方法onPlayFromMediaId().
在单击recyclelerview项目时具有recyclelerview的片段内部,将调用以下代码.从图像中可以看出,mediaId除了songBundle值之外,还有传递给onPlayFromMediaId()方法.
奇怪的是,在Service类中,playFromMediaId()方法被覆盖,它只接收字符串变量的值,mediaId而songBundle神奇地变为空.(注意 - 用于放置和获取parcelable的键也是相同的.piplable songsVO是实现Parcelable接口的POJO .)
除了这个我注意到的另一个有趣的事情,当我返回到onPlayFromMediaId()已经执行后调用后面的片段并检查每个变量的值,除了mediaId每个其他变量都变为null.
RecyclerAdapter类
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
onPlayFromMediaId(String, Bundle)当Bundle传递为空时,TLDR- 仅传递String变量.
参考 - 本教程
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |