实现方法:
一、利用contentresolver获取对象后通过。Qure方法获取cursor对象然后循环遍历从数据库筛选歌手姓名,并将歌手姓名单一的放在listview上显示。
二、过传参的方式将歌手姓名传递给显示歌曲的界面,该界面通过歌手姓名在数据库中找到指定歌手的歌曲。
具体实现代码如下:
(1)歌手类
public class SingerActivity extends Activity {
ImageView mReturn;//返回键
ListView mListView;//歌手列表
ArrayList<Singer> singers;
SingerAdapter singerAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
initView();
initSinger();
singerAdapter = new SingerAdapter(singers,this);
mListView.setAdapter(singerAdapter);
/**
* Item传参式点击事件
*/
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Intent intent =new Intent(SingerActivity.this,SongListActivity.class);
//Toast.makeText(SingerActivity.this, singers.get(i).getName(), Toast.LENGTH_SHORT).show();
intent.putExtra("name",singers.get(i).getName());
startActivity(intent);
}
});
/**
* 返回点击事件
*/
}
/**
* 注册组件
*/
void initView(){
setContentView(R.layout.activity_singer);
mListView = (ListView) findViewById(R.id.lv_singers);
mReturn = (ImageView) findViewById(R.id.iv_return);
}
void initSinger(){
Cursor cursor = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null);
String otherName ="";
singers =new ArrayList<>();
if(cursor!=null){
while(cursor.moveToNext()){
String songName =cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
// String artist = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.ARTIST));
if (!songName.equals(otherName)){
Singer singer1 = new Singer(R.mipmap.yangzongwei,songName);
singers.add(singer1);
}
otherName =songName;
// Toast.makeText(SingerActivity.this, songName, Toast.LENGTH_SHORT).show();
}
}
}
public void returnSinger(View v){
Intent intent =new Intent(SingerActivity.this,MainActivity1.class);
startActivity(intent);
}
}
(二)。歌曲类
public class SongListActivity extends Activity {
ArrayList<Song> mSongs;
MySongAdapter mySongAdapter;
ListView listView;
ContentResolver contentResolver;
ImageView mReturn;//返回歌手列表
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_song_list);
listView = (ListView) findViewById(R.id.lv_song_item);
contentResolver = getContentResolver();
Intent intent= getIntent();
String singerName = intent.getStringExtra("name");
mSongs =new ArrayList<>();
Cursor cursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null);
if(cursor!=null){
while(cursor.moveToNext()){
if(cursor.getString(cursor.getColumnIndex("artist")).equals(singerName)){
String songName =cursor.getString(cursor.getColumnIndex("title"));
String albumb =cursor.getString(cursor.getColumnIndex("album"));
long duration =Long.parseLong(cursor.getString(cursor.getColumnIndex("duration")));
String minute =minute(duration);
long _size =Long.parseLong(cursor.getString(cursor.getColumnIndex("_size")));
String size =formetFileSize(_size);
Song song =new Song(songName,albumb,minute,size);
mSongs.add(song);
// Log.d("歌曲","歌曲:"+songName+"专辑:"+albumb+"市场:"+minute+"大小:"+size);
}
}
mySongAdapter =new MySongAdapter(mSongs,SongListActivity.this);
listView.setAdapter(mySongAdapter);
}
}
/**
* 返回歌手列表方法
*/
public void returnSinger(View v){
Intent intent =new Intent(SongListActivity.this,SingerActivity.class);
startActivity(intent);
}
/**
* 将时长转化为字符串格式
* @param time
* @return
*/
public String minute(long time){
Date date = new Date(time);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
String dateStr = sdf.format(date);
String minute = dateStr.substring(dateStr.length()-4,dateStr.length());
minute= minute.replace(":","分");
minute =minute+"秒";
return minute;
}
/**
* 将大小转为M格式
* @param fileS
* @return
*/
public String formetFileSize(long fileS) {
DecimalFormat df = new DecimalFormat("#.00");
String fileSizeString = "";
if (fileS < 1024) {
fileSizeString = df.format((double) fileS) + "B";
} else if (fileS < 1048576) {
fileSizeString = df.format((double) fileS / 1024) + "K";
} else if (fileS < 1073741824) {
fileSizeString = df.format((double) fileS / 1048576) + "M";
} else {
fileSizeString = df.format((double) fileS / 1073741824) + "G";
}
return fileSizeString;
}
}