0

我有一个 SeekBar 和一些从 sd 卡获取的 MediaFiles。下面是我编写的用于播放 MediaFile 并根据 MediaFile 位置推进 SeekBar 的代码,但是当我单击 ListView 中的项目时,它什么也不做,也什么都不开始。我不知道这段代码有什么问题。帮助!!如果您需要其他信息,请告诉我。

  songAdapter1.setOnItemClickListener(new songAdapter.OnItemClickListener() {
                @Override
                public void onItemClick(RecyclerView.ViewHolder holder, View view, final songInfo obj, int position) {
                    if(mediaPlayer.isPlaying()){
                        mediaPlayer.stop();
                        mediaPlayer.reset();
                        mediaPlayer.release();
                        mediaPlayer = null;

                    }else {

                        Runnable runnable = new Runnable() {
                            @Override
                            public void run() {
                                try {
                                    mediaPlayer = new MediaPlayer();
                                    mediaPlayer.setDataSource(obj.getSongUrl());
                                    mediaPlayer.prepareAsync();
                                    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                                        @Override
                                        public void onPrepared(MediaPlayer mp) {
                                            mp.start();
                                            seekBar.setProgress(0);
                                            seekBar.setMax(mediaPlayer.getDuration());
                                            Log.d("Prog", "run: " + mediaPlayer.getDuration());
                                        }
                                    });




                                }catch (Exception e){}
                            }

                        };
                        myHandler.postDelayed(runnable,100);

                    }
                }


            });
            checkUserPermission();

            Thread t = new runThread();
            t.start();
            return rootView;
        }

            class runThread extends Thread {
                @Override
                public void run() {
                    while (true) {
                        try {
                            Thread.sleep(1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        Log.d("Runwa", "run: " + 1);
                        if (mediaPlayer != null) {
                            seekBar.post(new Runnable() {
                                @Override
                                public void run() {
                                    seekBar.setProgress(mediaPlayer.getCurrentPosition());
                                }
                            });

                            Log.d("Runwa", "run: " + mediaPlayer.getCurrentPosition());
                        }
                    }
                }
            }

    package com.example.murarilal.atry;

    public  class songAdapter extends RecyclerView.Adapter<songAdapter.SongHolder> {
        private Context context;
        MediaMetadataRetriever metaRetriver;
        byte[] art;
        MediaPlayer m;
        Handler mHandler;
        private OnItemClickListener mOnItemClickListener;
        private ArrayList<songInfo> _songs = new ArrayList<songInfo>();
        SeekBar seekbar;
        Handler handler;
        MediaPlayer mp;
        public songAdapter(Context context, ArrayList<songInfo> songs) {
            this.context = context;
            this._songs = songs;
        }


        public interface OnItemClickListener {
            void onItemClick(RecyclerView.ViewHolder holder, View view, songInfo obj, int position);

            //void onItemClick(Button b, View view, songInfo obj, int position);
        }

        public void setOnItemClickListener(final OnItemClickListener mItemClickListener) {
            this.mOnItemClickListener = mItemClickListener;
        }


        @Override
        public SongHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
            View myView = LayoutInflater.from(context).inflate(R.layout.card, viewGroup, false);
            return new SongHolder(myView);
        }

        @Override
        public void onBindViewHolder(final SongHolder songHolder, final int i) {
            final songInfo s = _songs.get(i);
            metaRetriver = new MediaMetadataRetriever();
            metaRetriver.setDataSource(_songs.get(i).getId());
            try {
                art = metaRetriver.getEmbeddedPicture();
                Bitmap songImage = BitmapFactory.decodeByteArray(art, 0, art.length);
                songHolder.album_art.setImageBitmap(songImage);
            } catch (Exception e) {
                //  Drawable resId;
                //resId = R.drawable.music;
                songHolder.album_art.setBackgroundResource(R.drawable.music);
            }
            setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(RecyclerView.ViewHolder holder, View view, songInfo obj, int position) {
                    if (mOnItemClickListener != null) {
                        mOnItemClickListener.onItemClick(songHolder, view, s, i);
                    }

                }
            });
            //final String filename = "android.resource://" + this.context + "/raw/test0";
            songHolder.tvSongName.setText(_songs.get(i).getSongName());
            songHolder.tvSongArtist.setText(_songs.get(i).getArtistName());
            songHolder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {

                }

            });
        }

        @Override
        public int getItemCount() {
            return _songs.size();
        }
        public class SongHolder extends RecyclerView.ViewHolder {
            TextView tvSongName,tvSongArtist;
            ImageView album_art;
            public SongHolder(View itemView) {
                super(itemView);
                tvSongName = (TextView) itemView.findViewById(R.id.songName);
                tvSongArtist = (TextView) itemView.findViewById(R.id.artistName);
                album_art = (ImageView) itemView.findViewById(R.id.albumArt);
                seekbar=itemView.findViewById(R.id.seekBar);
            }
        }
        public void setSearchResult(List<songInfo> result) {
            _songs = (ArrayList<songInfo>) result;
            notifyDataSetChanged();
        }
    }
4

1 回答 1

0

您没有添加正确添加的代码来更新您的搜索栏值。试试下面的代码

    private Runnable UpdateSongTime = new Runnable() {
      public void run() {
         startTime = mediaPlayer.getCurrentPosition();
         tx1.setText(String.format("%d min, %d sec",
            TimeUnit.MILLISECONDS.toMinutes((long) startTime),
            TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
            toMinutes((long) startTime)))
         );
         seekbar.setProgress((int)startTime);

      }
   };

此外,您不必在可运行文件中添加准备好的侦听器方法。将该方法放在 runnable 之外,只需从 PreparedListener 方法调用上述可运行代码

要调用处理程序,请使用以下代码

myHandler.postDelayed(UpdateSongTime , 100);

于 2018-02-13T11:09:58.673 回答