我想获得特定专辑的歌曲,就像我点击专辑时我应该只获得该专辑的歌曲。我得到所有专辑,当我点击专辑,我得到设备上的所有歌曲。该专辑的那些。所以请告诉我该怎么做。我尝试了很多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);
}
}
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();
}
}