我是靠谱客的博主 唠叨小虾米,最近开发中收集的这篇文章主要介绍android如何将连接ble放入子线程,android – 如何使蓝牙SPP连接过程更可靠?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我们即将发布我们软件的新版本,对于之后的版本,我们的目标是使我们的蓝牙SPP连接的连接过程更加可靠.我们在产品中使用RN42模块,目前有时可能需要多次尝试才能连接到我们的主板.

这是我目前的代码:

class ConnectThread extends Thread {

BluetoothDevice mDevice;

public ConnectThread(BluetoothDevice device) throws SecurityException, NoSuchMethodException {

mDevice = device;

UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");

try {

btSocket = mDevice.createInsecureRfcommSocketToServiceRecord(uuid);

} catch (IOException e) {

Log.e("Error", "Could not create socket!");

}

}

public void cancel() {

interrupt();

try {

Log.i("Treadmill", "in connect thread cancellation");

btSocket.close();

} catch (IOException localIOException) {

Log.e("Treadmill", "exception + " + localIOException.getMessage());

}

}

public void run() {

btAdapter.cancelDiscovery();

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

Log.e("whatever", "InterruptedException: " + e.getMessage(), e);

}

try {

btSocket.connect();

Log.i("Treadmill", "After Connect");

} catch (IOException ioe) {

Log.i("Treadmill", "Trying Fallback");

try {

Method m;

try {

btSocket.close();

m = mDevice.getClass().getMethod("createInsecureRfcommSocket", new Class[]{int.class});

btSocket = (BluetoothSocket) m.invoke(mDevice, 1);

Thread.sleep(500);

btSocket.connect();

} catch (IllegalArgumentException e) {

Log.e("whatever", "IllegalArgumentException: " + e.getMessage(), e);

} catch (IllegalAccessException e) {

Log.e("whatever", "IllegalAccessException: " + e.getMessage(), e);

} catch (InvocationTargetException e) {

Log.e("whatever", "InvocationTargetException: " + e.getMessage(), e);

} catch (NoSuchMethodException e) {

Log.e("whatever", "NoSuchMethodException: " + e.getMessage(), e);

} catch (InterruptedException e) {

Log.e("whatever", "InterruptedException: " + e.getMessage(), e);

}

} catch (IOException ioe2) {

Log.e("Treadmill", "Failed to connect to Bluetooth device: " + ioe2.getMessage());

eventHandler.obtainMessage(MESSAGE_ERRORCONNECT, 0, 0, getResources().getString(R.string.connerr) + ": " + ioe2.getMessage()).sendToTarget();

try {

btSocket.close();

} catch (IOException localIOException2) {

Log.e("Error", "IO Exception!");

}

return;

}

}

eventHandler.obtainMessage(MESSAGE_CONNECT, 0, 0, "").sendToTarget();

synchronized (this) {

connectThread = null;

}

manageConnectedSocket(btSocket);

}

}

即使反射回退,连接也会在某些设备上间歇性地失败.我收到以下错误:

find_rfc_slot_by_id无法找到RFCOMM插槽ID:XX(XX是每次尝试连接时递增的数字).

接下来是这样的:

无法连接到蓝牙设备:读取失败,套接字可能关闭或超时,读取ret:-1

有谁知道如何避免这些错误.

有趣的是,为了比较.我正在测试两款平板电脑.一个平板电脑,三星Galaxy Tab 4似乎工作得非常好,而另一个,Astro Tab A10,似乎有点间断,除非你在连接和断开连接之间等待几秒钟.

最后

以上就是唠叨小虾米为你收集整理的android如何将连接ble放入子线程,android – 如何使蓝牙SPP连接过程更可靠?的全部内容,希望文章能够帮你解决android如何将连接ble放入子线程,android – 如何使蓝牙SPP连接过程更可靠?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(58)

评论列表共有 0 条评论

立即
投稿
返回
顶部