Странное поведение метода 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 передается пустым.

Ссылка- это руководство

0 ответов

Другие вопросы по тегам