兩臺android裝置間通過OTG-USB連線,實現通訊(android裝置間的通訊)
阿新 • • 發佈:2019-02-07
public class ChatActivity extends BaseChatActivity {
private final AtomicBoolean keepThreadAlive = new AtomicBoolean(true);
private final List<String> sendBuffer = new ArrayList<>();
@Override
public void sendString(final String string) {
sendBuffer.add(string);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new Thread(new CommunicationRunnable()).start();
}
private class CommunicationRunnable implements Runnable {
@Override
public void run() {
final UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
final UsbDevice device=getIntent().getParcelableExtra(ConnectActivity.DEVICE_EXTRA_KEY);
UsbEndpoint endpointIn = null;
UsbEndpoint endpointOut = null;
final UsbInterface usbInterface = device.getInterface(0);
for (int i = 0; i < device.getInterface(0).getEndpointCount(); i++) {
final UsbEndpoint endpoint = device.getInterface(0).getEndpoint(i);
if (endpoint.getDirection() == UsbConstants.USB_DIR_IN) {
endpointIn = endpoint;
}
if (endpoint.getDirection() == UsbConstants.USB_DIR_OUT) {
endpointOut = endpoint;
}
}
if (endpointIn == null) {
printLineToUI("Input Endpoint not found");
return;
}
if (endpointOut == null) {
printLineToUI("Output Endpoint not found");
return;
}
final UsbDeviceConnection connection = usbManager.openDevice(device);
if (connection == null) {
printLineToUI("Could not open device");
return;
}
final boolean claimResult = connection.claimInterface(usbInterface, true);
if (!claimResult) {
printLineToUI("Could not claim device");
} else {
final byte buff[] = new byte[Constants.BUFFER_SIZE_IN_BYTES];
printLineToUI("Claimed interface - ready to communicate");
while (keepThreadAlive.get()) {
final int bytesTransferred = connection.bulkTransfer(endpointIn, buff, buff.length, Constants.USB_TIMEOUT_IN_MS);
if (bytesTransferred > 0) {
printLineToUI("host> "+new String(buff, 0, bytesTransferred));
}
synchronized (sendBuffer) {
if (sendBuffer.size()>0) {
final byte[] sendBuff=sendBuffer.get(0).toString().getBytes();
connection.bulkTransfer(endpointOut, sendBuff, sendBuff.length, Constants.USB_TIMEOUT_IN_MS);
sendBuffer.remove(0);
}
}
}
}
connection.releaseInterface(usbInterface);
connection.close();
}
}
@Override
protected void onStop() {
super.onStop();
keepThreadAlive.set(false);
}
}