2017-01-12 17 views
5

Tôi là người mới hoàn thành với thế giới Android.Vui lòng tha thứ cho tôi nếu câu hỏi của tôi quá ngây thơ.Ghép nối Bluetooth OOB có thực sự được hỗ trợ trong Android không?

Tôi đã làm việc trên một ứng dụng mẫu để thực hiện ghép nối Bluetooth giữa Hộp Linux (FC-21 chạy Bluez-5.42) và máy tính bảng Android. Tôi đang sử dụng NFC để chuyển tên Bluetooth, địa chỉ và dữ liệu OOB từ PC sang Android. Tôi có thể gửi dữ liệu trên từ máy tính đến Android qua NFC (chùm chính xác) và tôi có thể phân tích cú pháp và giải mã tất cả dữ liệu ở phía Android. Với địa chỉ Bluetooth của hộp Linux có sẵn trên Android, tôi có thể gọi CreateBond() để ghép nối máy tính bảng Android với Hộp Linux. Tôi đã thử nghiệm phần này và nó hoạt động như mong đợi.

Bây giờ, vấn đề với phương pháp này là, trong khi ghép nối Bluetooth Mô hình kết hợp so sánh số hoặc mô hình mục nhập mã khóa được sử dụng, điều tôi cảm thấy là một sai lầm đối với trải nghiệm người dùng khi sử dụng NFC để thực hiện ghép nối. Vì tôi đã có dữ liệu OOB của PC, tôi muốn sử dụng liên kết OOB để ghép nối để trải nghiệm người dùng không bị xâm phạm.

Để thực hiện việc này, khi tôi thay thế CreateBond() bằng CreateBondOutOfBand() [sử dụng phép phản chiếu], không yêu cầu ghép nối nào được gửi từ Android đến máy tính Linux.

 try { 
     showLog("Pairing started"); 
     Method m = bDev.getClass().getMethod("createBondOutOfBand", byte[].class, byte[].class); 
     showLog("Found method"); 
     Boolean flag = (Boolean) m.invoke(bDev, Hash, Rand,(Object[]) null); 
     //Method m = bDev.getClass().getMethod("createBond", (Class[]) null); 
     //Boolean flag = (Boolean) m.invoke(bDev, (Object[]) null); 
     if(flag) 
      showLog("Pairing successfully finished."); 
     else 
      showLog("Pairing failed"); 
    } catch (Exception e) { 
     showLog("Pairing failed."); 
    } 

Tôi đã tìm kiếm trực tuyến nhưng không thể tìm thấy bất kỳ bằng chứng cụ thể nào về việc ghép nối OOB có thể được triển khai trong Android.

Hơn nữa, để kiểm tra hành vi của Android gốc, tôi đã tạo thẻ NFC có tên Bluetooth, địa chỉ và dữ liệu OOB của hộp Linux. Khi tôi giữ thẻ chống lại máy tính bảng Android, ghép đôi Bluettoth đã được bắt đầu nhưng nó vẫn không sử dụng mô hình kết hợp OOB.

Câu hỏi của tôi là như sau,

  • là OOB mô hình hiệp hội thực sự hỗ trợ trên Android?
  • Nếu mô hình liên kết OOB được hỗ trợ, là CreateBondOutOfBand() các API sẽ được sử dụng hoặc có bất kỳ API nào khác mà tôi cần sử dụng không?

Mọi yếu tố đầu vào sẽ được đánh giá cao.

Cảm ơn,

Sài

+0

Xin chào, chúng tôi đang đối mặt với cùng một vấn đề. Bạn đã tìm thấy giải pháp chưa? – Seynorth

+0

Xin chào, tôi cũng muốn biết nếu bạn đã tìm thấy câu trả lời – ymerdrengene

+0

@Seynorth, ymerdrengene Tôi xin lỗi, tôi không có thời gian để xem lại điều này. – saai63

Trả lời

0

tôi không sử dụng NFC nhưng tôi sử dụng phản ánh để sử dụng createBondOutOfBand. Ngoài ra, mã này hoạt động trên dòng truyền thống Motorola 7.1 (trên Moto G4 play và Moto E 2015) và trên rom chính thức của Samsung 7.0 (Galaxy S6), nhưng không hoạt động trên ROM chính thức của LG G5 hoặc G6 7.0 (xác thực luôn thất bại).

Đây là mã của tôi (không thực sự khác với mã của bạn @ saai63).

private boolean createBondOutOfBand(final byte[] oobKey) { 
    try { 
     if (DEBUG) { 
      Log.d(LOG_TAG, "createBondOutOfBand entry"); 
     } 

     Class c = Class.forName("android.bluetooth.OobData"); 
     Constructor constr = c.getConstructor(); 
     Object oobData = constr.newInstance(); 
     Method method = c.getMethod("setSecurityManagerTk", byte[].class); 
     method.invoke(oobData, oobKey); 

     Method m = mBluetoothDevice.getClass().getMethod("createBondOutOfBand", int.class, c); 
     boolean res = (boolean)m.invoke(mBluetoothDevice, BluetoothDevice.TRANSPORT_AUTO, oobData); 

     if (DEBUG) { 
      Log.d(LOG_TAG, "createBondOutOfBand result => " + res); 
     } 

     return res; 

    } 
    catch (Exception e) { 
     Log.e(LOG_TAG, "Error when calling createBondOutOfBand", e); 
     return false; 
    } 
} 
Các vấn đề liên quan