#1.bindService(intent,con,BIND_AUTO_CREATE)使得MusicPlayerService的OnCreate()方法执行(但是OnStartCommand()方法不会执行)。
在OnCreate()中获取音乐列表:
@Override
public void onCreate() {
super.onCreate();
// 获得音乐列表
getDataFromLocal();
}
/**
* 从本地的sdcard得到数据
* //1.遍历sdcard,后缀名
* //2.从内容提供者里面获取视频
* //3.如果是6.0的系统,动态获取读取sdcard的权限
*/
private void getDataFromLocal() {
// 因为服务本身默认在主线程执行,所以需要开启新线程
new Thread(){
@Override
public void run() {
super.run();
// isGrantExternalRW((Activity) context);
// SystemClock.sleep(2000);
mediaItems = new ArrayList<>();
ContentResolver resolver = getContentResolver();//服务本身就是一个Context
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String[] objs = {
MediaStore.Audio.Media.DISPLAY_NAME,//视频文件在sdcard的名称
MediaStore.Audio.Media.DURATION,//视频总时长
MediaStore.Audio.Media.SIZE,//视频的文件大小
MediaStore.Audio.Media.DATA,//视频的绝对地址
MediaStore.Audio.Media.ARTIST,//歌曲的演唱者
};
Cursor cursor = resolver.query(uri, objs, null, null, null);
if(cursor != null){
while (cursor.moveToNext()){
MediaItem mediaItem = new MediaItem();
mediaItems.add(mediaItem);//写在上面
String name = cursor.getString(0);//视频的名称
mediaItem.setName(name);
long duration = cursor.getLong(1);//视频的时长
mediaItem.setDuration(duration);
long size = cursor.getLong(2);//视频的文件大小
mediaItem.setSize(size);
String data = cursor.getString(3);//视频的播放地址
mediaItem.setData(data);
String artist = cursor.getString(4);//艺术家
mediaItem.setArtist(artist)</