【发布时间】:2010-11-09 09:15:24
【问题描述】:
我正在尝试给我的蓝牙加密狗发送脉冲,看看它是否在范围内。 我的 Android 每秒都会向加密狗发送一个 char,然后它会以一个 char 响应。如果没有响应,或者char错误,那么应该断定没有连接。
我能够从 Android 向加密狗(连接到 MCU)发送数据,并且加密狗能够响应。 我所需要的只是一种简单的方法来读取每个字符(收到时)以进行比较。我正在尝试在单独的线程中执行它以使其在自己的循环中运行。
到目前为止,这是我的代码,但我想我可能会离开,所以如果你能给我指点!
void readFromInputStream()
{
Thread readFromInputStream = new Thread()
{
public void run()
{
String streng = "";
try
{
//just 100 times for now
for(int i = 0; i < 100; i++)
{
BufferedReader in = new BufferedReader(new InputStreamReader(inStream));
if(in.read() == 'z')
{
//set variable or something
}
else
{
//do something else
}
writeTerminal('z');
sleep(1000);
}
}
catch(Exception e)
{
Log.e("Threading", e.toString());
}
finally
{
finish();
}
}
};
readFromInputStream.start();
}
}
但似乎每次我尝试评估某些东西时它都会冻结!
【问题讨论】:
-
抱歉,手头的问题我帮不上忙,但您可能希望在 Android 上使用轮询时要小心一点 - 您会耗尽电池电量,尤其是每 1 秒轮询一次。跨度>
-
其实我宁愿避免轮询部分,但我希望断开蓝牙加密狗(不是安卓蓝牙)在尝试写入时会抛出异常,但似乎没有工作,所以我想出了投票解决方案....叹息!
-
尝试进行设备发现/查询或远程名称请求以检查设备是否在范围内...
-
听起来很合理,但是设备发现实在是太慢了……除非您可以通过某种方式询问某个设备是否存在,而不是搜索和过滤所有设备!。
标签: android multithreading bluetooth inputstream polling