本文转载自:https://blog.csdn.net/phoebe_2012/article/details/47025309

用代码实现断开Android手机USB连接

       
        用代码 实现了一个小功能:断开android手机USB连接。
        
  1. <span style="white-space:pre">    </span>// 尝试断开USB连接
  2. boolean disconnectUSB() {
  3. String state = "none";// 禁用所有usb
  4. //String state = "adb";// 仅使用adb
  5. //String state = "mtp,adb";// 使用mtp与adb
  6. SystemProperties.set("sys.usb.config", state);
  7. // wait for the transition to complete.
  8. // give up after 1 second.
  9. for (int i = 0; i < 20; i++) {
  10. // State transition is done when sys.usb.state is set to the new configuration
  11. if (state.equals(SystemProperties.get("sys.usb.state"))) return true;
  12. SystemClock.sleep(50);
  13. }
  14. return false;
  15. }

也可通过反射机制进行调用,但其实最终实际执行的还是上面的代码。

    1. try {
    2. final int MSG_SET_CURRENT_FUNCTIONS = 2;
    3. IBinder usb_service = ServiceManager.getService(Context.USB_SERVICE);
    4. Class<?> c_UsbService = Helpers.findClass("com.android.server.usb.UsbService");
    5. Field f_mDeviceManager = Helpers.findField(c_UsbService, "mDeviceManager");
    6. Object o_mDeviceManager = f_mDeviceManager.get(usb_service);
    7. Class<?> c_UsbDeviceManager = Helpers.findClass("com.android.server.usb.UsbDeviceManager");
    8. Field f_mHandler = Helpers.findField(c_UsbDeviceManager, "mHandler");
    9. Object o_mHandler = f_mHandler.get(o_mDeviceManager);
    10. Handler h_mHandler = (Handler) o_mHandler;
    11. // 禁用adb
    12. Field f_mAdbEnabled = Helpers.findField(c_UsbDeviceManager, "mAdbEnabled");
    13. f_mAdbEnabled.setBoolean(o_mDeviceManager, false);
    14. // 不提供USB服务
    15. Message msg = Message.obtain(h_mHandler, MSG_SET_CURRENT_FUNCTIONS);
    16. msg.obj = new String("none");
    17. msg.arg1 = 0;
    18. h_mHandler.removeMessages(MSG_SET_CURRENT_FUNCTIONS);
    19. h_mHandler.sendMessage(msg);
    20. Log.d("test", "[End]try disconnect USB");
    21. return true;
    22. } catch (Throwable e) {
    23. e.printStackTrace();
    24. Log.e("test", "[disconnectUSB][Throwable]" + e.getMessage());
    25. }
    26. return false;
05-10 23:08