6

Android 3.1 の UsbRequest クラスに問題があります。

これは私のコードです:

ByteBuffer buffer = ByteBuffer.allocate(4096);
buffer.order(ByteOrder.LITTLE_ENDIAN);
UsbRequest request = new UsbRequest();
request.initialize(mConnection, mEndpointIn);
request.queue(buffer, 4096);

if (mConnection.requestWait() == request) {
   byte[] data = buffer.array();
}

配列のサイズdataは 4096 ですが、実際に受信したバイトの長さはそれよりもはるかに小さくなっています。

実際に受信したバイトのサイズを確認するにはどうすればよいですか?

ありがとう。

4

4 に答える 4

5

これはAndroidのバグでした。苦しんでいるバージョンでは、実装が単に長さを渡さないため、回避策はありません。

JB-MR1(APIレベル17以降)で修正されました。

于 2013-02-06T17:43:57.427 に答える
3

現在の非同期 USB API には、読み取りサイズを返す方法がないように思えます。2つの「回避策」では、読み取り/書き込みのバイト数を受信するか、実装しているプロトコルが受信するバイト数を送信するため、同期転送を使用します。たとえば、私は現在、受信するすべての上位レベルのパケットに、パケットの最初の 4 バイトのバイト数があるものを実装しています。この数に基づいて、複数の読み取りを行う必要があるかどうかがわかります。

于 2011-09-02T17:31:20.623 に答える
1

使用できますrequest.queue(buffer, bufferLength);。これで問題が解決するはずです。ここで、Android のドキュメントを参照する必要があります。十分にドキュメント化されており、役に立ちます。

于 2012-10-31T07:04:30.150 に答える
0

buffer.limit()受信したバイト数を返す必要があると思います。それは動作しますか?

于 2011-08-02T17:00:22.317 に答える