我可以将数据从手机发送到arduino并在手机中得到回复,但是在同一活动中,出于实际原因我需要在另一项活动中显示手机中收到的数据,所以我试试使用put extras选项传递接收到的数据,但是我得到一个错误并且应用程序崩溃,因为数据在其他线程中接收我认为如果在启动第二个活动之前接收到的数据不完整可能会导致问题,任何建议吗?
答案 0 :(得分:0)
好吧,我很久以前就已经这么做了,我不记得我在蓝牙样本中做了哪些改变,所以只需按照这些步骤进行操作,你就可以从任何一个班级发送和接收字符串。
如果您在android sdk示例中使用蓝牙聊天示例,请执行以下操作:
- 在bluetoothchat类: *将“私有”BluetoothChatService mChatService更改为“public”。 然后在你要发送字符串的活动中执行此操作
BluetoothChat.mChatService.write(byteArray);
其中byteArray听起来像是一个字节数组,所以你需要一个字符串到字节数组的转换器来简化:
public static byte[] convertStringToByteArray(String s)
{
byte[] byteArray = null;
if(s!=null)
{
if(s.length()>0)
{
try
{
byteArray = s.getBytes();
} catch (Exception e)
{
e.printStackTrace();
}
}
}
return byteArray;
}
用于发送和接收:
我所做的是为进入和退出特定类做一个布尔值,例如当我输入一个类时,我会将此布尔值设为true并将我在Bluetoothchat类中收到的字符串转发到我想要的类,例如您将在以下代码行中访问蓝牙聊天课程:
case MESSAGE_READ:
byte[] readBuf = (byte[]) msg.obj;
// construct a string from the valid bytes in the buffer
String readMessage = new String(readBuf, 0, msg.arg1);
mConversationArrayAdapter.add(mConnectedDeviceName+": " + readMessage);
其中readMessage是你收到的字符串消息,但你会把它作为“readMessage”一个公共的静态变量.....所以你会说我是否在活动例如第一个然后设置静态布尔值为true,你会创建一个函数,例如名为update,它检查boolean是否为true然后获取readMessage字符串并用它做任何你想做的事情,例如设置文本:
if(Bluetoothchat.one==true)
tv.settext(Bluetoothchat.readMessage);
然后你需要在退出当前活动时将此布尔值更改为false,这样应用程序就不会崩溃,所以你可以这样做:
@Override
public void onBackPressed() {
BluetoothChatone.one=false;
super.onBackPressed();
}
如果你收到错误告诉我,我可以看到我错过了什么告诉你。