获取Android媒体库中的音乐文件
差不多结束了考试周(还剩一门英语听力),坐下来静静的看代码是一件多么令人感到愉悦的事情。随心所欲,在代码的世界里尽情的遨游。
想到之前写过的一个音乐播放器还没与完善,于是就想着把代码给优化一下。因为之前写音乐播放器急于求成,加上当时对SQLite数据库很陌生,在进行音乐加载时采用的是用递归对SD卡进行全部扫描的笨力搜索导致音乐播放器在打开的时候要加载很长时间。这两天学习了数据库的操作后尝试着从媒体库中直接去取音乐文件的方法,
结果成功了。废话不多说了,看看代码才是硬道理!!
上代码:
package com.example.testmediascanner;
import java.util.Arrays;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.AlertDialog.Builder;
import android.database.Cursor;
import android.media.AudioManager;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.Menu;
import android.widget.ArrayAdapter;
import android.widget.ListView;
public class MainActivity extends Activity {
/**
* 音乐的基本数据,用数组进行各个的存储
*/
private int[] _ids;
private int[] _album_id;
private int[] durations;
private String[]_titles;
private String[] albums;
private String[] artists;
private String[] _path;
/**
* 提示框
*/
private AlertDialog ad = null;
private AlertDialog.Builder builder = null;
//列表框,用来展示音乐名称
private ListView listView;
//用来查询媒体库
private Cursor c;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//初始化
listView=(ListView)findViewById(R.id.listView1);
//获取数据
setListData();
}
/**
* 从媒体库中查询音乐文件,将音乐名加载到列表框中
*/
public void setListData(){
//查询数据库
c=this.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[]{
MediaStore.Audio.Media.TITLE,
MediaStore.Audio.Media.DURATION,
MediaStore.Audio.Media.ARTIST,
MediaStore.Audio.Media._ID,
MediaStore.Audio.Media.ALBUM,
MediaStore.Audio.Media.DATA,
MediaStore.Audio.Media.ALBUM_ID
}, null, null, null);
//若无音乐文件,提示用户没有音乐文件
if(c==null||count==0){
builder=new Builder(this);
builder.setTitle("提示");
builder.setMessage("存储列表为空。。。");
ad=builder.create();
ad.show();
}
//将游标放到第一处
c.moveToFirst();
//得到媒体库中音乐的个数
int count=c.getCount();
//初始化数组
_ids=new int[count];
_album_id=new int[count];
durations=new int[count];
_titles=new String[count];
albums=new String[count];
artists=new String[count];
_path=new String[count];
//为数组赋值
for (int i = 0; i < count; i++) {
_ids[i] = c.getInt(3);
_album_id[i]=c.getInt(6);
durations[i]=c.getInt(1);
_titles[i] = c.getString(0).trim();
albums[i] = c.getString(4).trim();
artists[i] = c.getString(2).trim();
_path[i] = c.getString(5).trim();
c.moveToNext();
}
// 给列表加载数据
listView.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_expandable_list_item_1,
_titles));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
下面来看看效果: