Pemasangan Bluetooth dengan Nrf UART tidak berfungsi dengan benar

Pemasangan Bluetooth tidak berfungsi dengan benar. Saya sedang mengembangkan Aplikasi berdasarkan pemasangan Bluetooth dengan UART. Di sini saya telah memasukkan konsep dan Program saya. Bantu saya untuk memperbaiki masalah.

Hasil yang Saya Harapkan adalah Jika pengguna menekan tombol Hubungkan. Ini harus dipasangkan tanpa input pengguna dan Layar Konfirmasi untuk Permintaan Pasangan dan PIN. Akhirnya Perangkat Merespon kembali Terhubung.

Hasil Sebenarnya Saya adalah Layar Konfirmasi dan Popup Input Pengguna akan terbuka. Setelah itu Perangkat Dipasangkan. Akhirnya Perangkat tidak direspon kembali karena saya terhubung.

Saya Terjebak dalam Masalah itu Lebih dari 2 hari. Bantu saya keluar dari Masalah ini.

1. Daftarkan PAIRING dalam metode onstart()

          IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST);
         this.registerReceiver(mPairingRequestReceiver, filter);

2. BroadcastReceiver untuk Menerima Permintaan Penyandingan.

  private BroadcastReceiver mPairingRequestReceiver = new BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
            try {
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                int pin = intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY", 123456);
                //the pin in case you need to accept for an specific pin
                byte[] pinBytes;
                pinBytes = ("" + pin).getBytes("UTF-8");
                device.setPin(pinBytes);


        } catch (Exception e) {
                Log.e(TAG, "Error occurs when trying to auto pair");
                e.printStackTrace();
            }
        }
    }
};

/* Setelah perangkat terhubung saya membuat Bond*/

     @Override
     public void onDeviceConnected(BluetoothDevice device) {

        device.createBond();

      }

person sivaprakash    schedule 22.01.2018    source sumber


Jawaban (1)


Anda dapat melewati proses pemasangan Bluetooth asli dan memasangkan dengan perangkat Bluetooth secara terprogram. Coba ini:

Daftarkan penerima untuk BluetoothDevice.ACTION_PAIRING_REQUEST dengan prioritas tertinggi.

private void notPaired(){
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST);
    filter.setPriority(SYSTEM_HIGH_PRIORITY-1);
    registerReceiver(mReceiver, filter);
    mDevice.createBound();// OR establish connection with the device and read characteristic for triggering the pairing process 
    getBoundState();
}

private final BroadcastReceiver mReceiver = new BroadcastReceiver()
{
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if(BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action)){
            final BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
            int type = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);

            if(type == BluetoothDevice.PAIRING_VARIANT_PIN){
                byte[] pin = "123456".getBytes();
                device.setPin(pin);
                Log.i("Pairing Process ", "Pairing Key Entered");
                abortBroadcast();
            }else
                Log.i("Pairing Process: ", "Unexected Pairing type");
        }
    }
};

Untuk memastikan bahwa perangkat dipasangkan, daftarkan penerima untuk BluetoothDevice.ACTION_BOND_STATE_CHANGED

private void getBoundState(){
    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
    registerReceiver(boundStateReciver, filter);
}

private final BroadcastReceiver boundStateReciver= new BroadcastReceiver()
{
    public void onReceive(Context context, Intent intent) {
        String action = intent.getAction();
        if (BluetoothDevice.ACTION_BOND_STATE_CHANGED.equals(action)) {
            final int d = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE,-1);
            switch(d){
                case BluetoothDevice.BOND_BONDED:
                    Log.i("Pairing Process ", "Paired successfully");
                break;
            }
        }
    }
};

Di Manifes, tambahkan izin ini

<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />
person Salman Naseem    schedule 22.01.2018
comment
Anda perlu menetapkan prioritas maksimal ke IntentFilter Anda untuk melewati popup pemasangan sistem. - person Salman Naseem; 22.01.2018
comment
Saya telah mencoba Prioritas TINGGI dan RENDAH. Ini tidak berfungsi dengan baik. Ini Menampilkan Popup yang Sama. - person sivaprakash; 22.01.2018
comment
Apakah kalian tidak mendapatkan popup pemasangan yang datang dan pergi selama sepersekian detik? - person Yogesh Byndoor; 07.11.2018
comment
@YogeshByndoor menetapkan Prioritas Tinggi pada filter niat filter.setPriority(SYSTEM_HIGH_PRIORITY-1); - person Salman Naseem; 07.11.2018