2013-10-14 117 views
0

我可以将数据从手机发送到arduino并获得手机响应,但只是在同一活动中,出于实际原因,我需要显示手机中接收的数据另一个活动,所以我尝试使用put extras选项传递接收到的数据,但是我得到一个错误并且应用程序崩溃,因为数据正在其他线程中接收,我认为如果接收的数据未完成之前可能会导致问题启动第二个活动,任何sugestions?安卓蓝牙通信与2活动

回答

0

好的我已经在很长一段时间之前完成了这个工作,我不记得我在蓝牙示例中做了哪些更改,所以只需按照以下步骤操作即可发送和接收来自任何课程的字符串。

,如果你使用的是Android SDK中的样品在蓝牙聊天例子,然后执行以下操作:

- 在bluetoothchat类: *变“私” BluetoothChatService mChatService成“公”。 然后在活动要从做派一个字符串这

BluetoothChat.mChatService.write(byteArray); 

其中的ByteArray是因为它的声音字节数组,所以你需要AA串到字节数组转换器让一切变得简单:

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”公共静态变量.....所以你会说如果我在活动例如第一个然后设置静态布尔值为真,你会做一个函数例如称为更新,它检查布尔是否为真然后获取readMessage字符串并做任何你想要的东西,比如设置文本,例如:

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

然后你需要改变这个布尔值为false,当你退出当前活动,您是这样的应用程序不会崩溃,所以你可以做这样的事情:

@Override 
public void onBackPressed() { 

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

    } 

,如果你得到错误,告诉我,让我可以看到什么我已经错过了告诉你。