代码之家  ›  专栏  ›  技术社区  ›  devesh kumawat Dakshesh Khatri

如何仅获取特定专辑的歌曲

  •  0
  • devesh kumawat Dakshesh Khatri  · 技术社区  · 7 年前

    我想获得特定专辑的歌曲,比如当我点击一张专辑时,我应该只获得该专辑的歌曲。我正在获取所有唱片集,当我单击唱片集时,我将获取设备上的所有歌曲。不是那张专辑的。所以请告诉我怎么做。我尝试了许多stackoverflow答案,但没有得到答案。

    public class albumSongs extends AppCompatActivity implements SearchView.OnQueryTextListener {
    
        ArrayList<albumInfo>albumSongList=new ArrayList<>();
        RecyclerView recyclerView2;
        public albumsongAdapter albumsongAdapter;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_album_songs);
            Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setTitle("try");
            getSupportActionBar().setDisplayShowTitleEnabled(true);
            recyclerView2 = (RecyclerView) findViewById(R.id.recyclerView2);
            recyclerView2.setHasFixedSize(true);
            albumsongAdapter = new albumsongAdapter(albumSongList,this);
            SearchView searchView=(SearchView)findViewById(R.id.search);
            recyclerView2.setAdapter(albumsongAdapter);
            LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
            DividerItemDecoration dividerItemDecoration = new DividerItemDecoration(recyclerView2.getContext(),
                    linearLayoutManager.getOrientation());
            recyclerView2.setLayoutManager(linearLayoutManager);
            recyclerView2.addItemDecoration(dividerItemDecoration);
            getSongsPerAlbum("");
        }
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            final MenuItem item = menu.findItem(R.id.search_view);
            final SearchView searchView = (SearchView) MenuItemCompat.getActionView(item);
            searchView.setOnQueryTextListener(this);
            searchView.setQueryHint("search songs");
            MenuItemCompat.setOnActionExpandListener(item,new MenuItemCompat.OnActionExpandListener() {
                @Override
                public boolean onMenuItemActionExpand(MenuItem menuItem) {
                    // Return true to allow the action view to expand
                    return true;
                }
                @Override
                public boolean onMenuItemActionCollapse(MenuItem menuItem) {
                    // When the action view is collapsed, reset the query
                    albumsongAdapter.setSearchResult(albumSongList);
                    // Return true to allow the action view to collapse
                    return true;
                }
            });
            return true;
        }
        public boolean onQueryTextSubmit(String query) {
            return false;
        }
    
        public boolean onQueryTextChange(String newText) {
            final List<albumInfo> filteredModelList = filter(albumSongList, newText);
            albumsongAdapter.setSearchResult(filteredModelList);
            return true;
        }
    
    
        private List<albumInfo> filter(ArrayList<albumInfo> models, String query) {
            query = query.toLowerCase();
            final List<albumInfo> filteredModelList = new ArrayList<>();
            for (albumInfo model : models) {
                final String text = model.getX().toLowerCase();
                if (text.contains(query)) {
                    filteredModelList.add(model);
                }
            }
            return filteredModelList;
        }
        public void getSongsPerAlbum(String AlbumId) {
            final Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
            final String track_id = MediaStore.Audio.Media._ID;
            final String track_no = MediaStore.Audio.Media.TRACK;
            final String track_name = MediaStore.Audio.Media.TITLE;
            final String artist = MediaStore.Audio.Media.ARTIST;
            final String duration = MediaStore.Audio.Media.DURATION;
            final String album = MediaStore.Audio.Media.ALBUM;
            final String albumid = MediaStore.Audio.Media.ALBUM_ID;
            final String composer = MediaStore.Audio.Media.COMPOSER;
            final String year = MediaStore.Audio.Media.YEAR;
            final String path = MediaStore.Audio.Media.DATA;
            final String date_added = MediaStore.Audio.Media.DATE_ADDED;
            String[] columns = new String[]{
                    track_id,
                    track_no,
                    track_name,
                    artist,
                    duration,
                    album,
                    albumid,
                    composer,
                    year,
                    path,
                    date_added
            };
            // Get all tracks if no album id
            Cursor csr;
            if (AlbumId == null || AlbumId.length() < 1) {
                csr = this.getContentResolver().query(uri, columns,null,null,track_no);
            } else {
                // Doesn't work think media has to be scanned first before albums are generated
                csr = this.getContentResolver().query(uri, columns,album + "=?",new String[]{AlbumId},track_no);
            }
    
            for (String s: csr.getColumnNames()
                    ) {
                Log.d("SONGCOLUMN","Column = " + s);
            }
            while (csr.moveToNext()) {
                String id = (csr.getString(csr.getColumnIndex(track_name)));
                String thisalbumId=(csr.getString(csr.getColumnIndex(path)));
                String v = (csr.getString(csr.getColumnIndex(albumid)));
                Log.d("SONG","Name of Song is " + csr.getString(csr.getColumnIndex(track_name)) +
                        " from Album " + csr.getString(csr.getColumnIndex(album))
                );
    
                           albumInfo s = new albumInfo(id, v, thisalbumId);
                           albumSongList.add(s);
    
            }
            csr.close();
            //  recyclerView2.setAdapter(albumsongAdapter);
        }
    
    
    }
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   devesh kumawat Dakshesh Khatri    7 年前
    i solved by doing this.   
    
     public  class songAdapter extends RecyclerView.Adapter<songAdapter.SongHolder>{
            private Context context;
            MediaMetadataRetriever metaRetriver;
            byte[] art;
            private OnItemClickListener mOnItemClickListener;
            private ArrayList<songInfo> _songs = new ArrayList<songInfo>();
            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);
                }
    
                //final String filename = "android.resource://" + this.context + "/raw/test0";
                songHolder.tvSongName.setText(_songs.get(i).getSongName());
                songHolder.tvSongArtist.setText(_songs.get(i).getArtistName());
    
             added this
          /* 
             songHolder.itemView.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View view) {
                        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;
                SeekBar seekBar;
                public SongHolder(View itemView) {
                    super(itemView);
                    tvSongName = itemView.findViewById(R.id.songName);
                    tvSongArtist =  itemView.findViewById(R.id.artistName);
                    album_art =  itemView.findViewById(R.id.albumArt);
                    seekBar=(SeekBar)itemView.findViewById(R.id.seekBar);
                }
            }
            public void setSearchResult(List<songInfo> result) {
                _songs = (ArrayList<songInfo>) result;
                notifyDataSetChanged();
            }
        }