How to programmatically pair a bluetooth device on Android

后端 未结 10 1806
轻奢々
轻奢々 2020-11-30 23:27

For my application I\'m trying to programmatically pair a bluetooth device. I\'m able to show the pairing dialog for the device I want to pair and I can enter a pincode. Whe

相关标签:
10条回答
  • 2020-11-30 23:34

    It's my answer:

    in onCreate() write this:

        registerReceiver(incomingPairRequestReceiver, new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST));
    

    then create variable

    private final BroadcastReceiver incomingPairRequestReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action)) {
                BluetoothDevice dev = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                //pair from device: dev.getName()
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
                    dev.setPairingConfirmation(true);
                    //successfull pairing
                } else {
                    //impossible to automatically perform pairing,
                    //your Android version is below KITKAT
                }
            }
        }
    };
    
    0 讨论(0)
  • 2020-11-30 23:34

    Reflection is DODGY, different manufacturers can change these underlying methods as they wish! I have tested many different apps on our 10 devices here and these reflection method only works fully on roughly 75% of devices. If you want an app that works for everyone be very careful when using reflection - try some cloud testing to test your app on 100+ devices and check the failure rate.

    In this case reflection is not needed at all since API 19 (KitKat 4.4)

    BluetoothDevice has new method CreateBond.

     private void pairDevice(BluetoothDevice device) {
    
                device.createBond();
        }
    

    developer.android.com/reference/android/bluetooth/BluetoothDevice.html

    0 讨论(0)
  • 2020-11-30 23:39

    May be you need to startActivityForResult instead of only startActivity?

    Other option is to look into the BluetoothChat application sample and start an RFComm connection socket, as soon as you start the socket a pairing request will automatically appear without needing to send a separate intent for pairing. This way you won't need to handle pairing.

    http://developer.android.com/resources/samples/BluetoothChat/index.html

    0 讨论(0)
  • 2020-11-30 23:44

    Using reflection you can call the method createBond from the BluetoothDevice class.

    See this post: How to unpair or delete paired bluetooth device programmatically on android?

    There is also a solution for unpair.

    0 讨论(0)
  • 2020-11-30 23:53

    This is how I get it:

    Bluetooth device = mBtAdapter.getRemoteDevice(address);
    //address:11:23:FF:cc:22 
    Method m = device.getClass()        
     .getMethod("createBond", (Class[]) null);
             m.invoke(device, (Object[]) null); // send pairing dialog request
    
    After pairing//
           connectDevice(address);
    
    0 讨论(0)
  • 2020-11-30 23:56

    Unfortunately, I think the best that you are going to get is opening up Settings/Wireless & networks/Bluetooth Settings for the user like so:

        Intent intent = new Intent(Settings.ACTION_BLUETOOTH_SETTINGS);
        startActivityForResult(intent, REQUEST_PAIR_DEVICE);
    
    0 讨论(0)
提交回复
热议问题