0

我可以将数据从手机发送到 arduino 并在手机中获得响应,但只是在同一个活动中,出于实际原因,我需要在另一个活动中显示手机中收到的数据,所以我尝试通过使用 put extras 选项接收数据,但我收到错误并且应用程序崩溃,因为数据正在其他线程中接收,我认为如果在启动第二个活动之前接收到的数据不完整,这可能会导致问题,有什么建议吗?

4

1 回答 1

0

好的,我很久以前就这样做了,我不记得我在蓝牙示例中做了什么更改,所以只需按照这些步骤操作,您就可以发送和接收来自任何类的字符串。

如果您在 android sdk 示例中使用蓝牙聊天示例,请执行以下操作:

- 在 bluetoothchat 类中:*将“private”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;
 } 

那是发送和接收:

我所做的是为进入和退出特定类创建一个布尔值,例如,当我进入一个类时,我会将这个布尔值设为真,并将我在 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 的函数,该函数检查布尔值是否为真,然后获取 readMessage 字符串并对其执行任何操作,例如设置文本:

 if(Bluetoothchat.one==true)
 tv.settext(Bluetoothchat.readMessage);

那么您需要在退出当前活动时将此布尔值更改为 false,这样应用程序就不会崩溃,因此您可以执行以下操作:

 @Override
 public void onBackPressed() {

BluetoothChatone.one=false;
 super.onBackPressed();

   }

如果您遇到错误,请告诉我,这样我就可以看到我错过了要告诉您的内容。

于 2013-10-15T21:57:40.057 回答