阅读更多

太懶,直接上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.+ *
+ *+ * @hide+ */+ public static final String ACTION_VEHICLE_CRADLE_STATE =+ "android.hardware.usb.action.VEHICLE_CRADLE_STATE";++ /** * Broadcast Action: A broadcast for USB port changes. * * This intent is sent when a USB port is added, removed, or changes state.@@ -176,6 +191,14 @@ public class UsbManager { public static final String USB_CONFIGURED = "configured"; /**+ * Boolean extra indicating whether vehicle cradle is connected or disconnected.+ * Used in extras for the {@link #ACTION_VEHICLE_CRADLE_STATE} broadcast.+ *+ * {@hide}+ */+ public static final String VEHICLE_CRADLE_CONNECTED = "connected";++ /** * Boolean extra indicating whether confidential user data, such as photos, should be * made available on the USB connection. This variable will only be set when the user * has explicitly asked for this data to be unlocked.diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xmlindex 47f1994..1f6a787 100644--- a/core/res/AndroidManifest.xml+++ b/core/res/AndroidManifest.xml@@ -243,6 +243,7 @@ + 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. */

 

更多相关文章

  1. android 加密字符串
  2. Android(安卓)防止启动页面(SplashActivity)被多次启动(笔记)
  3. Android(安卓)recyclerview实现查看更多/收起功能
  4. android 第一季
  5. Android(安卓)Button Maker(在线生成android shape xml文件的工具
  6. Android增大button响应区域
  7. android FactoryReset
  8. android FactoryReset
  9. android小说阅读、MVP + RxJava + Retrofit项目、证件拍照裁剪、

随机推荐

  1. Android中使用listview实现qq/微信好友列
  2. Android中使用ormlite实现持久化--HelloO
  3. Android(安卓)中ShapeDrawable的使用
  4. 图文详解Android属性动画
  5. android读取sim卡联系人
  6. Android 解析jwt遇到java.lang.IllegalAr
  7. 在做Android中GIF遇到不能显示的问题
  8. 谈实现Android定时执行
  9. Android高手应该精通哪些内容?
  10. Android列表分页功能的实现,往下拉时刷新