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

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

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

       
        用代码 实现了一个小功能:断开android手机USB连接。
        
[java] view plain copy
 
  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.     }  


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

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