2013-10-14 109 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(); 

    } 

,如果你得到錯誤,告訴我,讓我可以看到什麼我已經錯過了告訴你。