U盘的插拔消息,需要设置Receiver并且设置过滤器才可以获取到广播消息。
注册的方法如下:
- 设置过滤器
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_MEDIA_UNMOUNTED);
intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
intentFilter.addAction(Intent.ACTION_MEDIA_BAD_REMOVAL);
// 需要为过滤器设置URL匹配标签,使用file来匹配隐式intent,否则无法接收U盘插拔事件
intentFilter.addDataScheme("file");
getActivity().getApplication().registerReceiver(mReceiver, intentFilter);
- 将过滤器加入接收器
/**
* 接收有设备变更消息
*/
BroadcastReceiver mReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Received " + intent);
// 接收到消息之后,调用的函数在下面
presenter.update();
}
};
需要注意的是过滤器的设置intentFilter.addDataScheme(“file”),这个很重要,是匹配隐式intent的自我标签,详细的介绍看这里。