本文主要是介绍Android Music android多媒体,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Bug: android4.0的Music没有扫描菜单,在开机状态sd卡上增删音频文件时,播放列表不会自动更新;
reason:Music通过contentResolver读取数据,只要数据库不更新,Music下改动,播放列表不会更新;
解决办法:
点击自己添加的search菜单项后,启动ScanningProgress 这个activity。这个扫描activity更多的是假象;
关键代码:
onOptionsItemSelected中:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
+ Environment.getExternalStorageDirectory())));
就ok了;
==========================================================
参考文章:
相信每个使用Android系统的人都会知道Android系统中带有一个图库应用程序或者一个音乐播放器吧。打开图库可以查看到当前终端里所有的图片文件,而音乐播放器可以看到当前终端里所有的MP3文件,而这个打开的过程并不会消耗太多的时间。如果是在打开的时候去扫描所有内存,所有SD卡的话,相信相应是不会这么迅速的。
后来通过观察终端的Log,发现每次开机时,会有几条tag为MediaScanner的log信息,顾名思义,这是在扫描媒体库,会不会是这个后台服务实现了图库和音乐的快速相应呢?带着此问题去查阅API,果然发现一个强大的类——MediaStore,通过类名很容易能想到,这个类是用于存放多媒体的。此类包含三个内部类,分别为:
MediaStore.Audio: 存放音频信息
MediaStore.Image: 存放图片信息
MediaStore.Vedio: 存放视频信息
上诉三个内部类又有其各自的内部类,鉴于其结构比较复杂,就不详细去描述了,有兴趣的朋友可以结合API自行研究。
这三个内部类存储了多媒体的一些基本信息,并通过ContentProvider的数据共享的机制,将其共享出来,提供给各个应用程序使用。
MediaStore这个类是android系统提供的一个多媒体数据库,android中多媒体信息都可以从这里提取。这个MediaStore包括了多媒体数据库的所有信息,包括音频,视频和图像,android把所有的多媒体数据库接口进行了封装,所有的数据库不用自己进行创建,直接调用利用ContentResolver去掉用那些封装好的接口就可以进行数据库的操作了。
MediaStore中的存储的信息是通过MediaScannerService这个后台服务维护的,MediaScannerService在接受到系统开机(BOOT_COMPLETED)、媒体挂载(MEDIA_MOUNTED)和扫描指令(MEDIA_SCANNER_SCAN_FILE)广播信息时,即启动MediaScannerService中扫描的相关代码(MediaScanner,此类被@hide隐藏,所以不多介绍)进行扫描和更新MediaStore内的信息。
=================================================================
总结如下:
扫描全部 我猜测其在效率方面可能有点副作用
- public void systemScan(){
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"
- + Environment.getExternalStorageDirectory())));
- }
-
扫描某个文件 参数:填入该文件的路径
- public void fileScan(String file){
- Uri data = Uri.parse("file://"+file);
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));
- }
-
扫描文件夹 参数:填入该文件夹路径
- public void fileScan(String file){
- Uri data = Uri.parse("file://"+file);
- sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, data));
- }
- public void folderScan(String path){
- File file = new File(path);
- if(file.isDirectory()){
- File[] array = file.listFiles();
- for(int i=0;i<array.length;i++){
- File f = array[i];
- if(f.isFile()){//FILE TYPE
- String name = f.getName();
- if(name.contains(".mp3")){
- fileScan(f.getAbsolutePath());
- }
- }
- else {//FOLDER TYPE
- folderScan(f.getAbsolutePath());
- }
- }
- }
- }
这篇关于Android Music android多媒体的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!