Rap*_*kle 6 android bluetooth google-nearby
我正在尝试将新的Android Nearby Connections v2.0 API 与P2P_CLUSTER连接策略一起使用。以下问题(两个设备都请求连接,但未成功连接)似乎出现在运行 Android KN 的各种设备上。有时代码会获得成功的持久连接……有时不会。
在这种场景下,双方都在广播和发现,双方互相发现,双方都发送连接请求(但没有发起连接)。使用特定的测试用例很难使这种情况可靠地发生,但它确实发生了。
使用 Android Monitor,我从一侧捕获了有关此场景的详细信息,并在下面列出了事件序列。在这个特定的会话中,我监控的设备是非常便宜的 KitKat 手机,远程端点是 Samsung Lollipop 平板电脑(以防万一)。
requestConnection紧接着,Android Monitor 显示此错误:
09-28 11:49:38.706 17321-17823/? E/NearbyConnections: In startClient(), UKEY2 failed with endpoint AqXW
java.io.IOException: bt socket closed, read return: -1
at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:647)
at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
at java.io.InputStream.read(InputStream.java:162)
at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:149)
at java.io.BufferedInputStream.read(BufferedInputStream.java:295)
at libcore.io.Streams.readFully(Streams.java:81)
at java.io.DataInputStream.readInt(DataInputStream.java:103)
at xkj.c(:com.google.android.gms@11509230:1)
at xkg.run(:com.google.android.gms@11509230:8)
at mng.run(:com.google.android.gms@11509230:25)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at mso.run(:com.google.android.gms@11509230)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)紧接着,它使用STATUS_ENDPOINT_IO_ERROR(8012)命中 requestConnection 的 ResultCallback 。
requestConnection返回了一个错误,我们停止发现,等待 3 秒,然后再次开始发现。我们重新启动发现后的下一条跟踪消息是来自 NearbyConnections 的这条消息:
09-28 11:49:46.333 17321-17412/? E/NearbyConnections: onIncomingConnection() for client 308946494 failed to initialize the connection with IkFxWFf_F-sAAAAAAAAAHHA_I2pIK25WaixTQEZSNHtVbmtub3duIFVzZXI
java.io.IOException: Failed to read ConnectionRequestFrame
at xjj.a(:com.google.android.gms@11509230:61)
at xlr.run(:com.google.android.gms@11509230:12)
at mng.run(:com.google.android.gms@11509230:25)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at mso.run(:com.google.android.gms@11509230)
at java.lang.Thread.run(Thread.java:818)
Caused by: java.io.IOException: bt socket closed, read return: -1
at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:647)
at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
at java.io.InputStream.read(InputStream.java:162)
at java.io.BufferedInputStream.fillbuf(BufferedInputStream.java:149)
at java.io.BufferedInputStream.read(BufferedInputStream.java:295)
at libcore.io.Streams.readFully(Streams.java:81)
at java.io.DataInputStream.readInt(DataInputStream.java:103)
at xkj.c(:com.google.android.gms@11509230:1)
at xjj.a(:com.google.android.gms@11509230:56)
at xlr.run(:com.google.android.gms@11509230:12)
at mng.run(:com.google.android.gms@11509230:25)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at mso.run(:com.google.android.gms@11509230)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)我猜上面的错误是从另一端的 requestConnection 触发的?如果我们没有那个错误,它会进入我的onConnectionInitiated回调吗?(只是为了澄清:它没有击中我的onConnectionInitiated回调。)
接下来,我再次发现另一个节点,并且requestConnection再一次。
在此之后,我立即看到来自 NearbyConnections 的以下(不同)错误消息:
09-28 11:51:14.639 17321-17412/? E/NearbyConnections: sendConnectionRequest() for client 308946494 failed to initialize the connection with endpoint AqXW
xjx: In connectImpl(), failed to connect to Bluetooth device 28:BE:03:0C:F1:5B for endpoint AqXW
at xlo.a(:com.google.android.gms@11509230:126)
at xjs.run(:com.google.android.gms@11509230:12)
at mng.run(:com.google.android.gms@11509230:25)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at mso.run(:com.google.android.gms@11509230)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)接下来,我们用STATUS_BLUETOOTH_ERROR(8007)击中 requestConnection 的 ResultCallback
在此之后,我看到设备连接然后自动断开连接,重复了几次。他们从未获得成功的持久连接,尽管我在一系列错误之后看到了这种情况。
这是同时连接冲突;如果您有 2 个设备同时相互连接,则在第二个设备触发两个设备上的 onConnectionInititated() 之前,附近连接将(随机)先使其中一个设备的 requestConnection() 失败。这就是为什么您在第一个日志中看到“java.io.IOException:bt套接字已关闭,读取返回:-1”。
如果不是因为 STATUS_BLUETOOTH_ERROR 失败,您应该会看到两个设备成功连接。
| 归档时间: |
|
| 查看次数: |
1139 次 |
| 最近记录: |