在制作音乐播放器的过程中,我发现第一次导入音乐到如下所示文件夹中
然后授予相关权限并运行模拟器,发现能加载第一次导入的音乐。
接着你没事做,进行第二次导入音乐,然后运行模拟器,发现只加载了第一次导入进来的音乐,不能加载第二次导入的音乐。是不是很奇怪?
奇怪很正常,当时我也懵逼了,所以上网查询了相关资料,发现原因是:
android的系统启动的时候,系统会自动扫描sdcard内的文件,并把文件保存在一个系统数据库中,程序每次访问的都是这个数据库,而不是sdcard。所以才会出现上述我所描述的问题,当然,不局限于音乐播放列表的更新,还有很多,只要是和sdcard内文件有关都是会遇到这个动态更新的问题。
我的解决方法:
在UI所在Activity中写如下代码,代码意思是向系统发送广播提醒系统该更新数据库了。
Uri uri = Uri.parse("file://" + Environment.getExternalStorageDirectory());
Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,uri);
sendBroadcast(intent);
注意:我写的uri是扫描sdcard里的所有文件,你可以根据项目的需要进行指定,别指错了就可以。