andoird实现读取手机的歌曲播放,详解读。。。。。。。记得在android6.0以上要打开存储权限问题。。。6了
读取的数据,通过 ContentResolver 获取歌曲。
Cursor cursor = contentResolver.query(contentUri, projection, where, null, sortOrder);
那么,query() 里面的的参数是什么呢???接下来,我们往下面看
query()这个方法的源码
public final @Nullable Cursor query(@RequiresPermission.Read @NonNull Uri uri,
@Nullable String[] projection, @Nullable String selection,
@Nullable String[] selectionArgs, @Nullable String sortOrder) {
return query(uri, projection, selection, selectionArgs, sortOrder, null);
}
第一个 读取外部内存储的内容。
/**
* The content:// style URI for the "primary" external storage
* volume.
*/
public static final Uri EXTERNAL_CONTENT_URI =
getContentUri("external");
通过 Media.EXTERNL_CONTENT_URL 得到。
第二个,返回列表,要查询的表内容。我们就根据自己想要的内容定义,如:
/**
* 查询返回内容
*/
private String[] projection = {
Media._ID,
Media.DISPLAY_NAME,
Media.DATA,
Media.ALBUM,
Media.ARTIST,
Media.DURATION,
Media.SIZE
};
"mime_type in ('audio/mpeg','audio/x-ms-wma') and bucket_display_name <> 'audio' and is_music > 0"
第五个,类型,为文本类型。
/**
* Path to the file on disk.
*
* Note that apps may not have filesystem permissions to directly access
* this path. Instead of trying to open this path directly, apps should
* use {@link ContentResolver#openFileDescriptor(Uri, String)} to gain
* access.
*
* Type: TEXT
*/
public static final String DATA = "_data";
到这里我们就讲解完 query() 的参数了。
通过1的阅读,我们拿到手机内存的歌曲,那么接下来,我们写一个activity来调用。。。
绑定音频播放的实体类, MediaPlayer
直接贴上代码,文章后面有github链接,可以下载
private RecyclerView rc_list;
private MyReclerViewAdapter myReclerViewAdapter;
private TextView start_tv, stop_tv;
private MediaPlayer mePlayer;
private final int REQUEST_CODE = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
rc_list = (RecyclerView) findViewById(R.id.rc_list);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
rc_list.setLayoutManager(layoutManager);
MusicLoader.instance(getContentResolver());
myReclerViewAdapter = new MyReclerViewAdapter(this, MusicLoader.musicList, this);
rc_list.setAdapter(myReclerViewAdapter);
//初始化mediaplayer对象,这里播放的是raw文件中的mp3资源
mePlayer = MediaPlayer.create(MainActivity.this, Uri.parse(MusicLoader.musicList.get(0).getUrl()));
}
然后 通过 mePlayer调用start()方法播放,,,pause()方法暂停播放。
/**
* Starts or resumes playback. If playback had previously been paused,
* playback will continue from where it was paused. If playback had
* been stopped, or never started before, playback will start at the
* beginning.
*
* @throws IllegalStateException if it is called in an invalid state
*/
public void start() throws IllegalStateException {
baseStart();
stayAwake(true);
_start();
}
/**
* Pauses playback. Call start() to resume.
*
* @throws IllegalStateException if the internal player engine has not been
* initialized.
*/
public void pause() throws IllegalStateException {
stayAwake(false);
_pause();
}
是不是很简单呀,对了,接下继续。。。
我们想了解决更多音频播放问题,我们自己得去google学习学习。看看源码提供向外的方法。。。大神指教,小神有礼了。。。
android 音频播放源码 : github.com源码