2017-10-20 276 views
1

我正在創建一個應該通過藍牙連接到特定設備的應用程序。在Android Studio中配對藍牙設備

我希望我的應用程序能夠與此設備連接,而不管它是否已配對。

現在我有這個

private void findDevice() { 
    Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices(); 
    if (pairedDevices.size() > 0) { 
     for (BluetoothDevice device : pairedDevices) { 
      if (device.getName().equals(DEVICE_NAME)) { 
       bluetoothDevice = device; 
       deviceFound = true; 
       break; 
      } 
     } 
    } 
} 

不過這個功能只連接到配對設備。 如果我的設備尚未配對,我想將它配對。 不知道該怎麼做。

有人可以給我任何建議嗎?

+0

您是否要求BLUETOOTH_ADMIN權限? – nhoxbypass

+0

是的,我請求 – Kirchhoff1415

+0

你有沒有嘗試過:https://stackoverflow.com/questions/14228289/android-pair-devices-via-bluetooth-programmatically – nhoxbypass

回答

1

第一次請求BLUETOOTH_ADMIN權限。

然後,讓您的設備可發現:

private void makeDiscoverable() { 
     Intent discoverableIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE); 
     discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300); 
     startActivity(discoverableIntent); 
     Log.i("Log", "Discoverable "); 
    } 

然後創建一個廣播接收器從系統中收聽到行動:

private BroadcastReceiver myReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 
      Message msg = Message.obtain(); 
      String action = intent.getAction(); 
      if(BluetoothDevice.ACTION_FOUND.equals(action)){ 
       //Found, add to a device list 
      }   
     } 
    }; 

,並開始註冊這個BoardcastReceiver搜索設備:

private void startSearching() { 
     Log.i("Log", "in the start searching method"); 
     IntentFilter intentFilter = new IntentFilter(BluetoothDevice.ACTION_FOUND); 
     BluetoothDemo.this.registerReceiver(myReceiver, intentFilter); 
     bluetoothAdapter.startDiscovery(); 
    } 

設備來自的BroadcastReceiver到一個列表後,從列表中createBond()這種選擇您的設備:

public boolean createBond(BluetoothDevice btDevice) 
    throws Exception 
    { 
     Class class1 = Class.forName("android.bluetooth.BluetoothDevice"); 
     Method createBondMethod = class1.getMethod("createBond"); 
     Boolean returnValue = (Boolean) createBondMethod.invoke(btDevice); 
     return returnValue.booleanValue(); 
    } 

然後使用上面的代碼與綁定設備進行管理。

+0

男士,非常感謝,似乎合法。 但是BroadcastReciever有問題。 Android Studio說我無法解析符號'BroadcastReciever'。 IM在谷歌搜索的答案,但無法找到一個:( – Kirchhoff1415

+0

@ Kirchhoff1415什麼問題 – nhoxbypass

+0

好,我知道,我缺少 進口android.content.BroadcastReceiver; 部分 – Kirchhoff1415