Android デバイスに外部大容量ストレージ デバイスを接続しています。ルート ディレクトリには、アプリに読み込む必要がある .BIN ファイルがいくつかあります。デバイスに接続し、UsbDeviceConnection を使用して USB 許可を受け取ることができます。
private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String output = outputTV.getText().toString();
String action = intent.getAction();
outputTV.setText(outputTV.getText() + "\n" + " ACTION: " + action);
if (ACTION_USB_PERMISSION.equals(action)) {
synchronized (this) {
UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if (device != null) {
if (device.getInterfaceCount() > 0) {
usbIntf = device.getInterface(0);
usbEndIn = usbIntf.getEndpoint(0);
usbEndOut = usbIntf.getEndpoint(1);
usbConnection = mUsbManager.openDevice(device);
usbConnection.claimInterface(usbIntf, true);
byte[] buffer = new byte[usbEndIn.getMaxPacketSize()];
StringBuilder str = new StringBuilder();
int retVal = usbConnection.bulkTransfer(usbEndIn, buffer, usbEndIn.getMaxPacketSize(), 2000);
for (int i = 2; i < buffer.length; i++) {
if (buffer[i] != 0) {
str.append((char) buffer[i]);
}}}}}}}}};
接続すると、2 つの Bulk Transfer エンドポイント (1 つのインと 1 つのアウト) を持つ 1 つの大容量ストレージ インターフェイスがあることがわかります。
usbConnection.bulkTransfer を使用すると、-1 が返され、空のバッファが返されます。そのため、データの受信に問題があります。そのハードルを超えると、データはどのように見えるでしょうか? デバイスからすべてのファイルをプルし続けるにはどうすればよいですか? ファイルごとにデータをアプリに転送する方法はありますか? これに近づくより良い方法はありますか?