- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
--------------------编辑-------------------- -----
一点点进步,但不是解决方案。如果我在要发送的命令之间插入以下代码,至少允许命令有时间在远程端处理(但这仍然不是正确的方法,正确的方法是等待在发送另一个命令之前响应“>”)...
android.os.SystemClock.sleep(150);
监听线程在系统时钟休眠期间被阻塞,因此调制解调器的输入直到代码序列发送后才会附加到 TextView ,这是不太理想的。不过, sleep 不是正确的方法,我需要找到更好的方法,这样我才能发送新命令,直到“>”结果从另一端的设备返回。当我完成这段代码时,我将需要一种方法来处理输入,所以如果我考虑的话, sleep 真的不是进步。插休眠眠的例子:
sendData("enable");
android.os.SystemClock.sleep(150);
sendData("password");
android.os.SystemClock.sleep(150);
sendData("conf t");
android.os.SystemClock.sleep(150);
sendData("interface eth0");
android.os.SystemClock.sleep(150);
//etc...etc...etc...
--------------------下面是原帖-------------------- ------
我正在使用来自 Matt Bell 博客的这段优雅编写的代码,位于此处: http://bellcode.wordpress.com/2012/01/02/android-and-arduino-bluetooth-communication/
来源位于: http://project-greengiant.googlecode.com/svn/trunk/Blog/Android%20Arduino%20Bluetooth
在不破坏代码的情况下,我正在尝试以一种方式优雅地将命令串行发送到连接的调制解调器,每次都等到收到完整的响应后再发送下一个命令。 (我知道这不是 Android 的做事方式,我可以使用其他语言在心跳中处理这个问题)。
这是我目前正在使用的东西(你会看到我还没有完成很远,事实上这段代码一直运行得非常好,直到我需要等待第一个命令完成才能发送更多命令命令)。我尽可能地省略了与这个问题无关的代码。提前致谢。
package Android.Arduino.Bluetooth;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Set;
import java.util.UUID;
import android.app.Activity;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.widget.TextView;
public class BluetoothTest extends Activity
{
TextView myLabel;
BluetoothAdapter mBluetoothAdapter;
BluetoothSocket mmSocket;
BluetoothDevice mmDevice;
OutputStream mmOutputStream;
InputStream mmInputStream;
int counter;
Thread workerThread;
byte[] readBuffer;
int readBufferPosition;
volatile boolean stopWorker;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
myLabel = (TextView)findViewById(R.id.label);
try
{
findBT();
openBT();
sendData("enable");
//insert some code to wait for response before sending (or handle that in the above line, or otherwise)
sendData("password");
//insert some code to wait for response before sending (or handle that in the above line, or otherwise)
sendData("conf t");
//insert some code to wait for response before sending (or handle that in the above line, or otherwise)
sendData("interface eth0");
//insert some code to wait for response before sending (or handle that in the above line, or otherwise)
//etc...etc...etc...
}
catch (IOException ex) { }
}
}
void openBT() throws IOException
{
UUID uuid = UUID.fromString("00001101-0000-1000-8000-00805f9b34fb"); //Standard SerialPortService ID
mmSocket = mmDevice.createRfcommSocketToServiceRecord(uuid);
mmSocket.connect();
mmOutputStream = mmSocket.getOutputStream();
mmInputStream = mmSocket.getInputStream();
beginListenForData();
myLabel.append("Bluetooth Opened" + "\n");
}
void beginListenForData()
{
final Handler handler = new Handler();
final byte delimiter = 62; //This is the ASCII code for a > character indicating all data received
stopWorker = false;
readBufferPosition = 0;
readBuffer = new byte[1024];
workerThread = new Thread(new Runnable()
{
public void run()
{
while(!Thread.currentThread().isInterrupted() && !stopWorker)
{
try
{
int bytesAvailable = mmInputStream.available();
if(bytesAvailable > 0)
{
byte[] packetBytes = new byte[bytesAvailable];
mmInputStream.read(packetBytes);
for(int i=0;i<bytesAvailable;i++)
{
byte b = packetBytes[i];
if(b == delimiter)
{
byte[] encodedBytes = new byte[readBufferPosition];
System.arraycopy(readBuffer, 0, encodedBytes, 0, encodedBytes.length);
final String data = new String(encodedBytes, "US-ASCII");
readBufferPosition = 0;
handler.post(new Runnable()
{
public void run()
{
myLabel.append(data);
}
});
}
else
{
readBuffer[readBufferPosition++] = b;
}
}
}
}
catch (IOException ex)
{
stopWorker = true;
}
}
}
});
workerThread.start();
}
void sendData(String msg0) throws IOException
{
msg0 += "\r";
mmOutputStream.write(msg0.getBytes());
myLabel.append("Data Sent" + "\n");
}
}
最佳答案
我知道这是一个很老的问题。但是,由于我正在开发类似的应用程序,所以我以不同的方式解决了它,这可能会有所帮助。
您可以通过标志实现发送/响应逻辑,而不是发送之间的延迟。所以一开始连接是initial
。您发送 enable
并将您的标志设置为 enableRequested
。然后让听众等待响应。一旦你让它继续发送 password
,将标志设置为 passwordSent
并再次释放线程。
所以我建议不要在 onCreate 中执行它,而是触发一个线程从 onCreate 连接。这应该能很好地工作。
关于android - Bluetooth Android SPP,向设备连续发送命令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10094734/
Bluetooth Low Energy 中计步的服务、特征值 (UUID) 是什么?蓝牙文档的相应页面未列出任何步骤。如何计算步数?步数设备是否使用运行速度和节奏服务?谢谢。 最佳答案 某些设备确实
我有 2 个 Raspberry Pi,运行 Raspbian,是最新的。每个 Pi 都有一个蓝牙 USB 加密狗。我可以使用 this. 让它们通过 RFCOMM 进行通信 现在,我想在蓝牙物理链路
在低功耗蓝牙中,一个主设备可以连接的最大从设备数量是多少?主设备可以连接的最大从设备数量是多少? Bluetooth Low Energy 有 40 个 channel ,但为什么它们只使用 3 个
我正在尝试关闭蓝牙服务,但 Bluecove 在连接关闭方法 ( https://code.google.com/p/bluecove/issues/detail?id=90 ) 上有错误,我正在尝试
我想开发像蓝牙 LE 外围设备这样的应用程序,它停止在与蓝牙 LE 中央设备连接时做广告,并限制与多个蓝牙 LE 中央设备连接的蓝牙 LE 外围设备。 一个蓝牙 LE 外围设备一次只能与一个蓝牙 LE
Eclipse 一直要我定义一个 startActivity 方法,但我不知道该在该方法中放置什么。我已经在我的 androidmanifest.xml 中启用了蓝牙。 我在下面提供了我的代码的摘录:
我想基于 BlueZ 构建一个 c 文件,但我的系统中似乎没有 bluetooth.h 文件。 fatal error: bluetooth/bluetooth.h: No such file or
我正在使用运行 jb 的 root 三星 galaxy nexus 手机,由于某种原因,我没有从蓝牙连接服务接收到任何广播 Intent 。您将在下面找到我的接收器 list 和广播接收器代码。任何提
嗨,在下面的代码中,已经打开了蓝牙电话,但它仍然要求我打开下面代码中的弹出窗口。。谁能帮帮我,我哪里做错了。。允许没有必要问已经蓝牙是
有没有人在调用 bluetoothDeive.createBond() 时遇到与以下错误消息相同的问题? android 4.4 api的方法? java.lang.SecurityException
我正在寻找有关 JSR-82 的帮助。我找了很久,甚至还找了大学的项目主管来帮忙,但到目前为止,我还是没有运气。 我的问题... 我有一个项目,我只需要扫描蓝牙设备 我还无法扫描我的蓝牙设备。我在 C
我正在基于著名的 BluetoothChat 示例开发具有蓝牙功能的应用程序。基本上,使用此应用程序,客户端可以向服务器发送一些数据包。 我已经使用两部 Xperia 智能手机(Xperia X8 和
我正在处理 Java 和 BlueCove 以找到蓝牙设备。 我创建了一个 Maven 项目并添加了 BlueCove 依赖项: net.sf.bluecove bluecove
首先,我上次尝试将 c 程序编译为 linux-arm 架构时遇到了问题,以便稍后在 android 应用程序中使用它。我成功地这样做了,稍后我会写一篇关于如何使用 NDK 独立工具链的文章。 现在我
作为我的类(class)项目之一,我想通过蓝牙耳机或任何此类蓝牙设备按下它们上的可用按钮来启动/触发我自己的 android 应用程序。我将按下蓝牙耳机上的任何特定按钮,我的应用程序应该能够检测到该按
我的项目是使用 Micro:bit 微处理器创建一个交互式程序我正在构建一个游戏,它使用钻机作为 Controller 读取旋转方向和速度作为控制输入 但是我的导师也说在游戏运行的同时给电路板供电会很
我对 Android 编程完全陌生,从技术上讲,这是我在 Android Studio 上工作的第一个大项目。我正在尝试创建一个 android 应用程序,它通过蓝牙连接到我的 Arduino 设备并
我了解蓝牙配置文件包含其他配置文件和协议(protocol)。我不明白蓝牙设备之间究竟是如何交互的。例如,如果您使用任何实现 A2DP 配置文件的附件并将其连接到 iPad,那么 iPad 会将所有音
我想检查设备上是否启用了蓝牙(以便应用程序可以在没有用户交互的情况下使用它)。有没有办法做到这一点?我也可以分别检查蓝牙和低功耗蓝牙吗? 最佳答案 我使用 Radio 完成了此操作类(class)。
我是开发带有蓝牙连接到外围设备的移动应用程序的新手。我搜索了GATT是用于蓝牙LE通信的相关配置文件,但是我们的客户建议我们使用UART服务。现在我很困惑 1.这两件事是如何关联的 2.我们是否必须选
我是一名优秀的程序员,十分优秀!