本人是做车机的,多媒体播放是车机系统中比较重要的功能,现在开车的人有时候喜欢听歌的,所以需要播放本地歌曲,这些歌曲是机主电脑或手机下载然后拷贝到sd卡或TF卡中的.下面针对播放器播放音乐时各种热插拔sd卡的情况作处理,以免程序崩溃,也是sd卡插拔广播的理解.
(1)首先请注意,安卓中一般只监听SD卡的拔插,不会去监听usb的拔插,较少,你见过手机有USB接口吗?现在的手机连sd卡都是不可拆卸的,而且监听usb的广播actions和sd卡的不一样.但是车机开发会保留一个sd卡卡槽和一个USB接口,其实这个USB接口也是SD卡,只不过是用读卡器把TF卡挂载到文件系统中去,因为拔插这个USB,我们项目开发也是通过SD卡的广播去注册接收也能接收到,所以是这么认为的;
(2)不管sd卡是直接拔掉还是从通知栏里手动卸载掉都会发出Intent.ACTION_MEDIA_EJECT和ACTION_MEDIA_UNMOUNTED广播
(3)不管sd卡是以何种方式安装,系统都会发出Intent.ACTION_MEDIA_MOUNTED和Intent.ACTION_MEDIA_SCANNER_STARTED以及Intent.ACTION_MEDIA_SCANNER_FINISHED广播,根据自己的需要进行监听即可
(4)另外需要注意UNMOUNTED和REMOVED的区别,unmounted只是没有挂载到文件系统上,不一定从sd卡卡槽中移除了;removed就说明sd卡从卡槽中移除了
(5)其实sd卡的拔插广播都是从frameworks\base\services\java\com\android\server\目录下MountService.java类中发出的,它也是通过jni从底层获取当前的外设列表
(6)收到sd卡的挂载的广播intent,这个intent中带有data和path,可以通过intent.getData().getPath()拿到,很有用的,可以通过path判断是哪一个外设挂载了;
上图中红色标记部分记得加上哦,否则监听不到的