- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们的设备通过蓝牙发送数据,在android应用中我们需要读取这些数据。
我能够建立蓝牙连接,接下来我调用线程以使用 BluetoothDevice 建立 BluetoothSocket 连接。此处读取字节时返回 0(零)此外,while 循环仅运行一次。
此外,我在下面的代码中使用的 UUID 来自一些蓝牙代码 fragment 。我是否需要获取设备的正确 UUID。
有人能帮忙吗?如果你给我有用的答案,我将不胜感激。
//Calling ConnectThread after Bluetooth is paired
public class ConnectThread extends Thread {
private final BluetoothSocket mmSocket;
private final BluetoothDevice mmDevice;
private final UUID MY_UUID = UUID
.fromString("00001101-0000-1000-8000-00805f9b34fb");
public ConnectThread(BluetoothDevice device) {
BluetoothSocket tmp = null;
mmDevice = device;
try {
String name = device.getName();
Log.e("Device Name ", name);
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
}
mmSocket = tmp;
}
public void run() {
// mAdapter.cancelDiscovery();
try {
mmSocket.connect();
ConnectedThread mConnectedThread = new ConnectedThread(mmSocket);
mConnectedThread.start();
} catch (IOException connectException) {
// try {
// mSocket.close();
// } catch (IOException closeException) { }
return;
}
}
public void cancel() {
try {
mmSocket.close();
} catch (IOException e) {
}
}
}
private class ConnectedThread extends Thread {
private final BluetoothSocket mmSocket;
private final InputStream mmInStream;
private final OutputStream mmOutStream;
public ConnectedThread(BluetoothSocket socket) {
mmSocket = socket;
InputStream tmpIn = null;
OutputStream tmpOut = null;
try {
tmpIn = socket.getInputStream();
tmpOut = socket.getOutputStream();
} catch (IOException e) {
}
mmInStream = tmpIn;
mmOutStream = tmpOut;
}
public void run() {
byte[] buffer = new byte[1024];
int begin = 0;
int bytes = 0;
while (true) {
try {
// bytes += mmInStream.read(buffer, bytes, buffer.length
// - bytes);
if (mmSocket.isConnected()) {
Log.e("Socket is connected", "Socket is connected");
}
int numOfBytes = mmInStream.available();
Log.e("numOfBytes", String.valueOf(+numOfBytes));
bytes = mmInStream.read(buffer);
// mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
// .sendToTarget();
} catch (IOException e) {
break;
}
}
}
i am struck and unable to read the data from the Bluetooth
最佳答案
Do I need to obtain the correct UUID of the device.
是的。您可以使用 BluetoothDevice
的 getUuids()
返回远程设备支持的功能 (UUID),或者 fetchUuidsWithSdp()
如果是新的 UUID是需要的。
The while loop is running for only once.
这是因为你的代码抛出错误,你正在处理这个错误并退出循环
while (true) {
try {
// bytes += mmInStream.read(buffer, bytes, buffer.length
// - bytes);
if (mmSocket.isConnected()) {
Log.e("Socket is connected", "Socket is connected");
}
int numOfBytes = mmInStream.available();
Log.e("numOfBytes", String.valueOf(+numOfBytes));
bytes = mmInStream.read(buffer);
// mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
// .sendToTarget();
} catch (IOException e) {
// THIS BREAK INTERRUPT YOUR WHILE-LOOP SENTENCE
break;
}
}
Here when the bytes are read it is returning as 0
因为您创建了一个套接字的 InputStream 它没有连接到任何东西(因为您创建的用于生成套接字的 UUID 在您建立蓝牙连接的设备中不存在)
编辑
获取 uuid 的其他方法是配置广播接收器以取回 uuid:
//Register the BroadcastReceiver
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
filter.addAction(BluetoothDevice.ACTION_UUID);
//Set your other filters
registerReceiver(ActionFoundReceiver, filter); // Don't forget to unregister during onDestroy
并创建您的 BroadcastRecievier 以获取 UUID:
private final BroadcastReceiver ActionFoundReceiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(BluetoothDevice.ACTION_UUID.equals(action)) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Parcelable[] uuidExtra = intent.getParcelableArrayExtra(BluetoothDevice.EXTRA_UUID);
for (int i=0; i<uuidExtra.length; i++) {
Log.i("TEST-UUIDS","Device: " + device.getName() + ", " + device + ", Service: " + uuidExtra[i].toString());
}
}
else if(BluetoothDevice.YOUR_OTHER_ACTION_1){
//YOUR CODE FOR ACTION 1
}
else if(BluetoothDevice.YOUR_OTHER_ACTION_2){
//YOUR CODE FOR ACTION 2
}
}
};
注意:并非每个蓝牙设备都显示其服务 uuid
关于Android BluetoothSocket 连接返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36866703/
我有一个同时运行 3 个线程的应用程序。一个线程用于在手机和另一个蓝牙设备(Arduino)之间建立蓝牙连接。线程 2 通过蓝牙播放从另一部手机传入的音频。线程 3 录制音频并通过蓝牙将音频发送到另一
嗨我正在尝试实现一个蓝牙库,我想在其中连接一次 rfcomm 套接字,然后在所有调用中重用它。我想知道它是否已连接,以便知道我是否应该调用 connect方法。我在蓝牙套接字的源代码中找不到任何东西,
我是 Android 的新手。现在我正在尝试使用蓝牙 API 制作一个两人 Pong 游戏。我或多或少尝试过复制 Android 网站上的 BluetoothChat 教程,但在切换到 Connect
我们的设备通过蓝牙发送数据,在android应用中我们需要读取这些数据。 我能够建立蓝牙连接,接下来我调用线程以使用 BluetoothDevice 建立 BluetoothSocket 连接。此处读
我有一个应用程序,它通过蓝牙连接到 RaspberryPi,并在接收一些数据时将相同的数据循环给它。 我在连接时遇到了一些问题,因此需要使用此解决方法将我的 Android 手机连接到 Raspber
我已经创建了一个 Android 应用程序,如果我的 Android 有一个蓝牙连接到我的电脑并且我关闭了我的电脑,isConnected 仍然返回 true。有人知道这是否可以修复吗? 不知道有没有
我希望在我的 Android 应用程序中通过蓝牙执行设备到设备的文件传输。目前我已经编写了在多个蓝牙设备之间建立连接所需的代码,并且我已经检索到连接的 BluetoothSockets 以进行数据交换
我已经编写了一个用于连接外部配件的蓝牙 API。API 的设计方式是有一堆阻塞调用,例如 getTime、setTime、getVolume、setVolume等这些工作的方式是它们创建一个有效负载来
我以这种方式创建了 gpsSocket: final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
基本上,我一直在研究使用蓝牙或 wifi 的无线鼠标。我已经完成了所有工作,包括阅读和编写消息。但是,通过蓝牙传输数据的速度太慢,无法弥补。我到处都看了看,但我无法弄清楚是什么导致了这种速度。我正在使
我应该在蓝牙输入流的 readLine 上插入超时。 BluetoothDevice device = BluetoothAdapter.getDefaultAdapter()
我遇到了这种罕见的情况,在这种情况下,我尝试将 BluetoothSocket 连接到服务器,但连接方法不会返回。这是我的代码: device = _adapter.getRe
我正在编写一个将从另一台设备接收串行数据的应用程序(不是 Android,如果重要的话它将是 Bluesmirf Silver 模块,但现在我只在我的笔记本电脑蓝牙适配器上尝试)。这是我正在使用的代码
我的程序与充当服务器的嵌入式蓝牙设备连接。我成功找到了附近的蓝牙设备,但是当我尝试连接到新设备时,我的程序因调用 BluetoothSocket.connect() 时出现 IO 异常而崩溃。我无法弄
我无法启动 Java 服务器(在 Windows 7 x64 上使用 bluecove 2.1.1,外部蓝牙加密狗)和 Android 客户端(操作系统版本 2.3。 6). 设备发现工作正常,但我无
是否有机会为设置超时 BluetoothSocket.connect(); 以便该方法在一定时间后取消? 谢谢! 最佳答案 如果你想在设备在一定时间内没有连接时取消连接尝试,那么运行一个线程。 run
我使用修改后的Google Bluetooth Chat应用程序在两个 Android 设备(Android 5 和 Android 6)之间进行客户端-服务器蓝牙 RFCOMM 通信。 我的客户端应
我正在查看 Bluetooth Chat sample application来自 Google,他们在 UI 线程上写入 BluetoothSocket 的 OutputStream。那是对的吗?通
我正在尝试连接到配对的蓝牙 设备(baracoda d-fly 条形码阅读器)。我尝试了市场上的程序 GetBlueDemo,它成功地从它的套接字中读取。 我写了自己的概念证明,但当我尝试连接到设备时
连接到蓝牙后,我需要 child 通过那个套接字发送数据。但是如何将套接字转移到 childActivity? 最佳答案 不确定它是否是最好的设计,但我在这里所做的并且它在我的简单应用程序上工作是将蓝
我是一名优秀的程序员,十分优秀!