Android Music android多媒体
来源:互联网 发布:ubuntu chrome可用源 编辑:程序博客网 时间:2024/05/27 20:24
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多媒体
- Android 多媒体之music之舞
- android music
- android --music database-1
- android --music database-2
- android music源码学习
- android music源码学习
- android music源码学习
- android music开发笔记
- android Music 源码学习
- android music 源代码汇总
- Android 多媒体
- android 多媒体
- android 多媒体
- Android多媒体
- Android多媒体
- Android多媒体
- Android--多媒体
- create database 或alter database失败,因为结果数据库的累计大小将超出每数据库为4096MB的许可限制值
- Win2008远程桌面多用户登陆的配
- 路
- android ANR相关问题
- 写在智能卡即将执行3C强制认证检测的前夜
- Android Music android多媒体
- 做好事前规划 ERP项目成功的根本保障
- Occlusion_query的学习与使用
- 通向架构师的道路(第九天)之weblogic的集群与配置
- Occlusion Query (ARB_occlusion_query 扩展的使用)
- 内部类访问外部类变量的问题
- 简单的权限设计方案
- libconfig使用方法
- ASP.NET MVC案例教程(基于ASP.NET MVC beta)——第七篇:闲话ASP.NET MVC