Android通过广播检测u盘是否插入
时间: 2023-10-10 11:15:46 浏览: 111
可以通过注册广播来检测U盘是否插入,具体步骤如下:
1. 在AndroidManifest.xml中注册广播接收器。
```
<receiver android:name=".UsbReceiver">
<intent-filter>
<action android:name="android.intent.action.MEDIA_MOUNTED" />
<action android:name="android.intent.action.MEDIA_REMOVED" />
</intent-filter>
</receiver>
```
这里注册了两个action,一个是当U盘被挂载时会发送的广播,一个是当U盘被移除时会发送的广播。
2. 创建一个广播接收器类UsbReceiver,继承BroadcastReceiver,并重写onReceive()方法。
```
public class UsbReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (action.equals(Intent.ACTION_MEDIA_MOUNTED)) {
// U盘被挂载了
} else if (action.equals(Intent.ACTION_MEDIA_REMOVED)) {
// U盘被移除了
}
}
}
```
在这个方法中,我们可以根据广播的action来判断是U盘被挂载还是被移除。
3. 在需要检测U盘插拔的地方注册广播接收器。
```
UsbReceiver usbReceiver = new UsbReceiver();
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(Intent.ACTION_MEDIA_MOUNTED);
intentFilter.addAction(Intent.ACTION_MEDIA_REMOVED);
registerReceiver(usbReceiver, intentFilter);
```
这里注册了和AndroidManifest中一样的两个action。
4. 在不需要检测U盘插拔的地方取消广播接收器的注册。
```
unregisterReceiver(usbReceiver);
```
需要注意的是,在广播接收器中不能进行过多的操作,因为广播接收器是在主线程中执行的,如果进行耗时的操作会导致ANR。如果需要进行耗时的操作,可以启动一个新的线程来执行。
阅读全文