用代码实现断开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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 Android USB 485 串口通信需要用到以下几个类: - UsbManager:用于管理 USB 设备连接断开的类。 - UsbDevice:代表 USB 设备的类。 - UsbSerialDriver:定义串口驱动程序的接口类。 - UsbSerialPort:定义串口端口的接口类。 - UsbSerialInterface:定义串口接口的接口类。 下面是一个简单的实现过程: 1. 在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.USB_PERMISSION"/> ``` 2. 创建一个 SerialPort 类,用于实现串口通信的具体操作: ```java public class SerialPort { private UsbManager mUsbManager; private UsbSerialPort mSerialPort; private UsbSerialDriver mDriver; private UsbDeviceConnection mConnection; private UsbEndpoint mReadEndpoint; private UsbEndpoint mWriteEndpoint; private static final int TIMEOUT = 1000; private static final int BAUD_RATE = 9600; public SerialPort(Context context, UsbDevice device) { mUsbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); mDriver = UsbSerialProber.getDefaultProber().probeDevice(device); mConnection = mUsbManager.openDevice(device); if (mConnection != null) { mSerialPort = mDriver.getPorts().get(0); mSerialPort.open(mConnection); mSerialPort.setParameters(BAUD_RATE, 8, UsbSerialPort.STOPBITS_1, UsbSerialPort.PARITY_NONE); mReadEndpoint = mSerialPort.getEndpoint(0); mWriteEndpoint = mSerialPort.getEndpoint(1); } } public void closePort() { try { mSerialPort.close(); } catch (Exception e) { e.printStackTrace(); } try { mConnection.close(); } catch (Exception e) { e.printStackTrace(); } } public void sendCommand(byte[] command) { if (mConnection != null && mWriteEndpoint != null) { mConnection.bulkTransfer(mWriteEndpoint, command, command.length, TIMEOUT); } } public String receiveData() { String data = ""; byte[] buffer = new byte[1024]; int bytesRead = mConnection.bulkTransfer(mReadEndpoint, buffer, buffer.length, TIMEOUT); if (bytesRead > 0) { data = new String(buffer, 0, bytesRead); } return data; } } ``` 在 SerialPort 类中,我们创建了一个 UsbManager 实例和一个 UsbSerialDriver 实例,然后通过调用 UsbSerialProber 的 getDefaultProber() 方法来获取到默认的串口探测器。接着我们打开了一个 UsbDeviceConnection,并通过调用 UsbSerialDriver 的 getPorts() 方法获取到一个 UsbSerialPort 实例。最后,我们通过调用 UsbSerialPort 的 open() 方法打开了串口,并设置了波特率、数据位、停止位和校验位。 在 SerialPort 类中,我们还实现了 sendCommand() 和 receiveData() 方法,用于发送和接收数据。 3. 在 Activity 中使用 SerialPort 类: ```java private void connectToDevice(UsbDevice device) { mSerialPort = new SerialPort(this, device); } private void sendCommand(byte[] command) { mSerialPort.sendCommand(command); } private String receiveData() { return mSerialPort.receiveData(); } private void disconnectFromDevice() { mSerialPort.closePort(); } ``` 在 Activity 中,我们首先创建了一个 SerialPort 实例,并在 connectToDevice() 方法中初始化了它。接着,我们可以调用 sendCommand() 和 receiveData() 方法来发送和接收数据。最后,在 disconnectFromDevice() 方法中我们关闭了串口连接
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值