android 新增一個廣播偵聽USB設備的插拔
16lz
2021-12-04
阅读更多 + diff --git a/services/usb/java/com/android/server/usb/UsbHostManager.java b/services/usb/java/com/android/server/usb/UsbHostManager.javaindex c272c76..25033df 100644--- a/services/usb/java/com/android/server/usb/UsbHostManager.java+++ b/services/usb/java/com/android/server/usb/UsbHostManager.java@@ -81,6 +81,11 @@ public class UsbHostManager { // contains all connected USB devices private final HashMap mDevices = new HashMap<>(); + private static final String HSUSB_STATE_MATCH =+ "DEVPATH=/devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb1/1-1";+ /*current vehicle cradle state*/+ private boolean mConnected;+ private static final String HSUSB_MSR_MATCH = "DEVPATH=/devices/soc/a800000.ssusb/a800000.dwc3/xhci-hcd.0.auto/usb1/1-1"; // current MSR connection state@@ -184,6 +189,10 @@ public class UsbHostManager { mHostBlacklist = context.getResources().getStringArray( com.android.internal.R.array.config_usbHostBlacklist); mUsbAlsaManager = alsaManager;+ if(ZebraUtils.isZebra()){+ // Watch for Host USB configuration changes+ mUsbUEventVehicleCradleObserver.startObserving(HSUSB_STATE_MATCH);+ } mSettingsManager = settingsManager; String deviceConnectionHandler = context.getResources().getString( com.android.internal.R.string.config_UsbDeviceConnectionHandling_component);@@ -485,6 +494,51 @@ public class UsbHostManager { mMSRConnected = 0; // reset flag } }++ /*+ * Listens for uevent messages from the kernel to monitor Vehicle Cradle state+ */+ private final UEventObserver mUsbUEventVehicleCradleObserver = new UEventObserver() {+ @Override+ public void onUEvent(UEventObserver.UEvent event) {+ if (DEBUG) Slog.v(TAG, "USB UEVENT: " + event.toString());++ String action = event.get("ACTION");+ String devtype = event.get("DEVTYPE");+ String product = event.get("PRODUCT");+ if (action != null && product!= null && devtype != null) {+ updateVehicleCradleState(action, devtype, product);+ }+ }+ };+ /*+ * update Vehicle Cradle state for+ * vendor id = 1d6b , product id = 0002 , bcddevice = 310+ */+ private void updateVehicleCradleState(String action, String devtype, String product) {++ if (("add".equals(action)) && ("usb_device".equals(devtype)) && ("1d6b/2/310".equals(product+ ))) {+ mConnected = true;+ updateVehicleCradleStateBroadcast();+ } else if (("remove".equals(action)) && ("usb_device".equals(devtype)) && ("1d6b/2/310".equals(product))) {+ mConnected = false;+ updateVehicleCradleStateBroadcast();+ }+ }+ /*+ * broadcast intent on vehicle cradle state change+ */+ private void updateVehicleCradleStateBroadcast() {+ // send a sticky broadcast containing current Vehicle Cradle state+ Intent intent = new Intent(UsbManager.ACTION_VEHICLE_CRADLE_STATE);+ intent.addFlags(Intent.FLAG_RECEIVER_REPLACE_PENDING+ | Intent.FLAG_RECEIVER_FOREGROUND);+ intent.putExtra(UsbManager.VEHICLE_CRADLE_CONNECTED, mConnected);+ Slog.i(TAG, "vehicle cradle broadcasting " + intent + " connected: " + mConnected);+ mContext.sendStickyBroadcastAsUser(intent, UserHandle.ALL);+ }+ /* Called from JNI in monitorUsbHostBus() to report new USB configuration for the device currently being added. Returns true if successful, false in case of error. */
太懶,直接上patch:
diff --git a/core/java/android/hardware/usb/UsbManager.java b/core/java/android/hardware/usb/UsbManager.javaindex 376a4de..be64369 100644--- a/core/java/android/hardware/usb/UsbManager.java+++ b/core/java/android/hardware/usb/UsbManager.java@@ -84,6 +84,21 @@ public class UsbManager { "android.hardware.usb.action.USB_STATE"; /**+ * Broadcast Action: A broadcast for Vehice Cradle state changes.+ *+ * This is a sticky broadcast intent for clients that include Vehicle cradle state connected/dis+ connected state,+ *
- + *
- {@link #VEHICLE_CRADLE_CONNECTED} boolean indicating whether vehicle cradle is connected+ or disconnected.+ *
更多相关文章
- android 加密字符串
- Android(安卓)防止启动页面(SplashActivity)被多次启动(笔记)
- Android(安卓)recyclerview实现查看更多/收起功能
- android 第一季
- Android(安卓)Button Maker(在线生成android shape xml文件的工具
- Android增大button响应区域
- android FactoryReset
- android FactoryReset
- android小说阅读、MVP + RxJava + Retrofit项目、证件拍照裁剪、