简体   繁体   中英

songs not playing in listView

in my music app i created listView and fetched songs from sd card.everything is perfect but when when i click on listItem songs doesnt play.it doesnt give any response.im lost.please give me some idea how to fix this problem.its been long im finding solution for this.i looked every single line of code but coudnt find mistake.please help.

public class BlankFragment2 extends Fragment {
    private ArrayList<songInfo> _songs = new ArrayList<songInfo>();
    RecyclerView recyclerView;
    SeekBar seekBar;
    Button play;
    public songAdapter songAdapter1;
    protected ImageView album_art;
    MediaPlayer mediaPlayer;
    private Handler myHandler = new Handler();
    public Cursor cursor;
    View rootView;



    // TODO: Rename parameter arguments, choose names that match
    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
    private static final String ARG_PARAM1 = "param1";
    private static final String ARG_PARAM2 = "param2";

    // TODO: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    private BlankFragment.OnFragmentInteractionListener mListener;

    public BlankFragment2() {
        // Required empty public constructor/
    }

    // TODO: Rename and change types and number of parameters
    public static BlankFragment newInstance(String param1, String param2) {
        BlankFragment fragment = new BlankFragment();
        Bundle args = new Bundle();
        args.putString(ARG_PARAM1, param1);
        args.putString(ARG_PARAM2, param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_PARAM1);
            mParam2 = getArguments().getString(ARG_PARAM2);
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        rootView= inflater.inflate(R.layout.fragment_blank_fragment2, container, false);
        recyclerView = rootView. findViewById(R.id.recyclerView);
        seekBar = rootView.findViewById(R.id.seekBar);
        album_art = rootView.findViewById(R.id.albumArt);
        songAdapter1 = new songAdapter(getActivity(),_songs);
        recyclerView.setAdapter(songAdapter1);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getActivity());
        DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView.getContext(),
                linearLayoutManager.getOrientation());
        recyclerView.setLayoutManager(linearLayoutManager);
        recyclerView.addItemDecoration(dividerItemDecoration);
        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;
    }

    public 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());
                }
            }
        }

    }


    private void checkUserPermission(){
        if(Build.VERSION.SDK_INT>=23){
            if(ActivityCompat.checkSelfPermission(getContext(), Manifest.permission.READ_EXTERNAL_STORAGE)
                    != PackageManager.PERMISSION_GRANTED){
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},123);
                return;
            }
        }
        loadSongs();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case 123:
                if (grantResults[0] == PackageManager.PERMISSION_GRANTED){
                    loadSongs();
                }else{
                    Toast.makeText(getContext(), "Permission Denied", Toast.LENGTH_SHORT).show();
                    checkUserPermission();
                }
                break;
            default:
                super.onRequestPermissionsResult(requestCode, permissions, grantResults);

        }

    }

    private void loadSongs() {
        Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
        String selection = MediaStore.Audio.Media.IS_MUSIC + "!=0";
         cursor = getContext().getContentResolver().query(uri, null, selection, null, null);
        if (cursor != null) {

            if (cursor.moveToFirst()) {
                do {

                    String name = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DISPLAY_NAME));
                    String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
                    String url = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                    String id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
                    songInfo s = new songInfo(name, artist, url,id);
                    _songs.add(s);
                }
                while (cursor.moveToNext());
                cursor.close();
                recyclerView.setAdapter(songAdapter1);
            }
        }
    }


    // TODO: Rename method, update argument and hook method into UI event
    public void onButtonPressed(Uri uri) {
        if (mListener != null) {
            mListener.onFragmentInteraction(uri);
        }
    }

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        if (context instanceof OnFragmentInteractionListener) {
            mListener = (BlankFragment.OnFragmentInteractionListener) context;
        } else {
            throw new RuntimeException(context.toString()
                    + " must implement OnFragmentInteractionListener");
        }

    }

    @Override
    public void onDetach() {
        super.onDetach();
        mListener = null;
    }
    public interface OnFragmentInteractionListener {
        void onFragmentInteraction(Uri uri);
    }
}

songAdapter

public  class songAdapter extends RecyclerView.Adapter<songAdapter.SongHolder>{

    private ArrayList<songInfo> _songs = new ArrayList<>();
    private Context context;
    MediaMetadataRetriever metaRetriver;
    byte[] art;
    private OnItemClickListener mOnItemClickListener;

    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) {
            songHolder.album_art.setBackgroundColor(Color.GRAY);
        }
        songHolder.tvSongName.setText(_songs.get(i).getSongName());
        songHolder.tvSongArtist.setText(_songs.get(i).getArtistName());
        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);
                }
            }
        });
    }

    @Override
    public int getItemCount() {
        return _songs.size();
    }
    public class SongHolder extends RecyclerView.ViewHolder {
        TextView tvSongName,tvSongArtist;
        ImageView album_art;
        Button play;
        public SongHolder(View itemView) {
            super(itemView);
            play=(Button)itemView.findViewById(R.id.play);
            tvSongName = (TextView) itemView.findViewById(R.id.songName);
            tvSongArtist = (TextView) itemView.findViewById(R.id.artistName);
            album_art = (ImageView) itemView.findViewById(R.id.albumArt);
        }
    }
}

Play Audio with media player.

 MediaPlayer myMediaPlayer = new MediaPlayer();
                myMediaPlayer.setVolume(1.5f, 1.5f);
                if (audioSavePathInDevice == null || audioSavePathInDevice.isEmpty()) {
                    Toast.makeText(AudioRecordingActivity.this, "No Audio Found", Toast.LENGTH_LONG).show();
                } else {
                    try {
                        FileInputStream is = new FileInputStream(audioSavePathInDevice);
                        myMediaPlayer.setDataSource(is.getFD());


                        myMediaPlayer.prepare();
                        myMediaPlayer.start();
                        Toast.makeText(AudioRecordingActivity.this, "Recording Playing", Toast.LENGTH_LONG).show();


                    } catch (IOException e) {
                        e.printStackTrace();
                    }

on the stop of audio, write below code

if (myMediaPlayer != null) {
            if (myMediaPlayer.isPlaying()) {
                myMediaPlayer.stop();
            }
        }                   

You are using RecyclerView . To do onItemClick try:

in songAdapter class in method onBindViewHolder add this code:

holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // Here put your code to play the songs!
            }
        });

Otherwise post songAdapter code please.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM