做一个Android本地音乐播放器,需要监听U盘与SD卡的插拔; 通过如下注册广播监听实现,特此记录一下。
插入时 -> MEDIA_MOUNTED
直接拔出-> MEDIA_BAD_REMOVAL
主动推出 -> MEDIA_EJECT -> MEDIA_UNMOUNTED; 再拔出 -> MEDIA_REMOVED
定义广播接收者
val broadcast = object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent) {
when(intent.action) {
//"android.intent.action.MEDIA_EJECT"
//插入的时候会接收到
Intent.ACTION_MEDIA_EJECT -> {
Log.i(TAG, "onReceive: MEDIA_EJECT")
}
//"android.intent.action.MEDIA_UNMOUNTED"
//主动推出
Intent.ACTION_MEDIA_UNMOUNTED-> {
Log.i(TAG, "onReceive: MEDIA_UNMOUNTED")
}
//"android.intent.action.MEDIA_REMOVED"
//主动推出后再拔出
Intent.ACTION_MEDIA_REMOVED -> {
Log.i(TAG, "onReceive: MEDIA_REMOVED")
}
//"android.intent.action.MEDIA_BAD_REMOVAL
//直接拔出会接收到
Intent.ACTION_MEDIA_BAD_REMOVAL -> {
Log.i(TAG, "onReceive: MEDIA_BAD_REMOVAL")
}
// "android.intent.action.MEDIA_MOUNTED"
//主动推出
Intent.ACTION_MEDIA_MOUNTED-> {
Log.i(TAG, "onReceive: MEDIA_MOUNTED")
}
}
}
}
注册广播接收者
val filter = IntentFilter()
filter.addAction("android.intent.action.MEDIA_EJECT")
filter.addAction("android.intent.action.MEDIA_UNMOUNTED")
filter.addAction("android.intent.action.MEDIA_REMOVED")
filter.addAction("android.intent.action.MEDIA_BAD_REMOVAL")
filter.addAction("android.intent.action.MEDIA_MOUNTED")
filter.priority = 1000
filter.addDataScheme("file")
this.registerReceiver(broadcast, filter)
通过以上方式在RK3568开发板上实现U盘与SD卡的插拔监听,对路径获取通过反射StorageManager中方法就可以获取到。