Android U盘与SD卡插拔广播监听

1,437 阅读1分钟

做一个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中方法就可以获取到。