2011-12-07 2 views
14

블루투스 장치에서 데이터를 연결하고 수신하기 위해 블루투스 채팅을 사용하고 있습니다.android에서 블루투스 장치에서 데이터 읽기

나는 독서 데이터를 다음 코드를 사용

public void run() { 
    byte[] buffer = new byte[1024]; 
    int bytes; 
    Log.v("MR", "start listening...."); 

    // Keep listening to the InputStream while connected 
    while (true) { 
     try { 
      // Read from the InputStream 
      Log.d("MR", "buffer in try"); 

      bytes = mmInStream.read(buffer); 
      Log.d("MR", "input stream :"+(new String(buffer))); 
      // Send the obtained bytes to the UI Activity 
      mHandler.obtainMessage(Conn.MESSAGE_READ, bytes, -1, buffer).sendToTarget(); 
      Log.d("MR", "buffer after"); 

     } catch (Exception e) { 
      Log.e("MR", "Error :"+e.getMessage()); 
      // 
      connectionLost(); 
      // break; 
     } 

     Log.d("MR", "buffer after while"); 
    } 
} 

장치는 중단없이 데이터를 모든 시간을 보내고있다. 내가의 메시지를 얻을 수 위의 코드와

:

bytes=mmInStream.read(buffer); 

을 결코 그 호출에서 반환

Log.d("MR", "buffer in try"); 

그런 다음 다음 라인에 간다. 나는 장치에서 데이터를 읽기 시작하고 연결이 끊어 질 때까지 멈추지 않기 때문이라고 생각합니다. 한 번에 일정량의 바이트를 읽으려면 어떻게해야합니까?

편집

가 그것 때문에 돈 것을에 bytes = mmInStream.read(buffer); 코드에 체류하지 않는 한, t는 장치에서 다시 데이터를 얻을?

+0

번째 문제는 내가 정상에 쓰기 havce하는 특정을하지 않을 수 있습니다. 나는 그것이 통신을하는 항구 일 것임에 틀림 없다라고 생각한다. 두 장치가 연결될 수 있습니까?하지만 소켓에는 아무 것도 전송되지 않습니다. 통신에 문제가있는 것이 있습니까? – prokopis

+0

Upvotes 좋은 롤 것입니다 ... 당신이 어떤 성공을 가지고 – JPM

+0

정확히 동일한 문제가 –

답변

13

반환하기 전에 특정 바이트 수를 읽는 것을 기다리는 readFully() 메서드를 사용할 수 있으므로 대신 DataInputStreams를 사용합니다. 나는 설정이 같은 BT 연결 :

BluetoothDevice btDevice = bta.getRemoteDevice(macAddress); 
BluetoothSocket btSocket = InsecureBluetooth.createRfcommSocketToServiceRecord(
        btDevice, UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"), false); 

btSocket.connect(); 
InputStream input = btSocket.getInputStream(); 
DataInputStream dinput = new DataInputStream(input); 

다음 나중에 내가 읽고 싶은 때 내가 내의 readFully 사용

dinput.readFully(byteArray, 0, byteArray.length); 
+0

InsecureBluetooth 데 희망. 당신이 창조 한 클래스인가요, 아니면 아무것도 가져올 수 없기 때문에 내가 가져야 만하는 콘돔인가요? – prokopis

+1

여기에서 InsecureBluetooth.java를 얻을 수 있습니다. http : //code.google.com/p/payforwarding/source/browse/trunk/source/Android/monac/src/jp/android_group/payforward/monac/bts/ InsecureBluetooth.java?r=103 – JPM

+0

나는 그것을 시도하고 장치에 연결합니다. 나는 또한 연결 상태가 있는지 확인하기 위해 본드 상태를 사용하고 리턴 코드 12를 얻습니다. 이는 괜찮 았음을 의미하지만 여전히 장치에서 안드로이드 장치로 돌아 오는 데이터를 얻지 못합니다. 소켓에 문제가있을 수 있습니까? – prokopis

관련 문제