2011-12-07 50 views
14

Tôi đang sử dụng trò chuyện qua bluetooth để kết nối và nhận dữ liệu từ thiết bị bluetooth.Đọc dữ liệu từ thiết bị bluetooth trong android

tôi sử dụng đoạn mã sau để đọc dữ liệu:

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"); 
    } 
} 

Thiết bị

đang gửi dữ liệu mọi lúc mà không dừng lại.

Với đoạn mã trên tôi nhận được thông báo của:

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

sau đó nó đi vào dòng tiếp theo:

bytes=mmInStream.read(buffer); 

và không bao giờ trở về từ cuộc gọi đó. Tôi đoán điều này là bởi vì nó bắt đầu đọc dữ liệu từ thiết bị và không dừng lại cho đến khi nó ngắt kết nối. Làm thế nào tôi có thể đọc một số lượng byte nhất định tại một thời điểm?

EDIT

Trừ khi nó ở lại để mã bytes = mmInStream.read(buffer); do rằng nó don; t nhận được bất kỳ dữ liệu trở lại vào từ thiết bị?

+0

thể không phải là chắc chắn rằng tôi havce ghi trên đầu trang. tôi nghĩ rằng nó phải là cổng mà nó làm cho giao tiếp. là nó có thể cho hai thiết bị được kết nối nhưng trên ổ cắm không có gì để được truyền os có cái gì đó đi sai với giao tiếp? – prokopis

+0

Upvotes sẽ là tốt đẹp lol ... hy vọng bạn đang có một số thành công – JPM

+0

có cùng một vấn đề chính xác –

Trả lời

13

Tôi sử dụng DataInputStreams thay vì bạn có thể thực hiện phương thức readFully() chờ đọc một số byte nhất định trước khi trở về. Tôi thiết lập kết nối BT như thế này:

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); 

rồi sau này khi tôi muốn đọc tôi sử dụng readFully:

vấn đề thứ
dinput.readFully(byteArray, 0, byteArray.length); 
+0

InsecureBluetooth. là một lớp học mà bạn đã tạo ra hoặc là một cái gì đó mà tôi phải nhập khẩu hoặc một contasnt vì tôi không thể tìm thấy bất cứ điều gì? – prokopis

+1

Bạn có thể nhận InsecureBluetooth.java từ đây ... 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

tôi đã dùng thử và tôi kết nối trên thiết bị. tôi cũng sử dụng trạng thái trái phiếu để kiểm tra xem có kết nối không và tôi nhận mã trả về 12, có nghĩa là ok, nhưng tôi vẫn không nhận được bất kỳ dữ liệu nào từ thiết bị đến thiết bị Android của tôi. nó có thể là bất kỳ vấn đề với các ổ cắm? – prokopis

Các vấn đề liên quan