如何监听USB插拔

来源:互联网 发布:苹果笔记本知乎 编辑:程序博客网 时间:2024/04/30 11:22

方式一:

//实例化IntentFilter对象IntentFilter fiter= new IntentFilter();filter.addAction("android.hardware.usb.action.USB_STATE");
mUsbReceiver = new USBReceiver();//自己注册的广播接收者
//注册广播接收者registerReceiver(mUsbReceiver ,filter);

  备注:

但是USBManager不可以点出来直接调用只能用他的String "android.hardware.usb.action.USB_STATE";

测试发现这个action生效,但不是即时生效的,因为这个action其实是监听USB是否connected,当USB connected时才会生效,有时候你插入了USB,但没connected,这个广播不会发出 .这个时候可以格式化刷机一下,我之前用这个就没有反应,后来格式化刷机了,问题得到了解决!


方式二:

IntentFilter filter = new IntentFilter();  filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);  filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);  registerReceiver(mUsbReceiver, filter);  
方式三: 
    

有没有一种即插就生效的呢

查看系统源码

监听USB的广播使用的是电池电量变化Action

   Intent.ACTION_BATTERY_CHANGE  





当使用这个action时即插就生效,并会持续监听

还有一种是是否是USB充电,只能是判断一下

   int chargePlug = arg1.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);  

boolean usbCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_USB;

boolean acCharge = chargePlug == BatteryManager.BATTERY_PLUGGED_AC;



private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {  24.        @Override  25.        public void onReceive(Context context, Intent intent) {  26.            String action = intent.getAction();  27.            UsbDevice usbDevice = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);  28.            String deviceName = usbDevice.getDeviceName();  29.            Log.e(TAG,"--- 接收到广播, action: " + action);  30.            if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {  31.                Log.e(TAG, "USB device is Attached: " + deviceName);  32.            } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {  33.                Log.e(TAG, "USB device is Detached: " + deviceName);  34.            }  35.        }  36.    };  37.      38.    protected void onStop() {  39.        super.onStop();  40.        unregisterReceiver(mUsbReceiver);  41.    };  42.}