gpt4 book ai didi

java - Android:为什么我无法以编程方式与蓝牙设备配对,即使使用 BLUETOOTH_PRIVILEGED 并设置配对确认

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:55 25 4
gpt4 key购买 nike

我目前正在尝试以编程方式将我的 Android 设备 (4.4.2 KitKat) 与 .NET 项目中的蓝牙适配器配对。

与用户输入( key 对话框)的正常配对有效,但我想绕过用户输入。

经过一番研究(here and here),我设法想出了一些代码,但对话框仍然出现。

下面我有我的权限:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PROFILE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_PRIVILEGED" />

最低API级别设置为19,所以我应该拥有蓝牙特权。

配对特定设备的代码:

    final String SERVER_MAC = "00:1A:7D:DA:71:07";
final BluetoothAdapter ba = BluetoothAdapter.getDefaultAdapter();
final ArrayList<BluetoothDevice> server = new ArrayList<>();
ba.startDiscovery();
BroadcastReceiver btReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(BluetoothDevice.ACTION_FOUND.equals(action)){
BluetoothDevice bd = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
Log.d(TAG,"Found device: " + bd.getName() + " : " + bd.getAddress());
if(bd.getAddress().equals(SERVER_MAC)){
Log.d(TAG,"Server bluetooth found");
server.add(bd);
Log.d(TAG,"creating bond");
bd.createBond();
ba.cancelDiscovery();

}
}
else if(BluetoothDevice.ACTION_PAIRING_REQUEST.equals(action)){
Log.d(TAG,"setting info");
setBluetoothPairingPin(server.get(0));
}
}
};
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
registerReceiver(btReceiver, filter);
IntentFilter pairingRequest = new IntentFilter(BluetoothDevice.ACTION_PAIRING_REQUEST);
registerReceiver(btReceiver,pairingRequest);

以及 ACTION_PAIRING_REQUEST 方法:

    byte[] pairingPin = "123456".getBytes();
try{
Log.d(TAG,"Trying to set pin");
bluetoothDevice.getClass().getMethod("setPin", byte[].class).invoke(bluetoothDevice,pairingPin);
Log.d(TAG,"Success setting pin");
try{
bluetoothDevice.getClass().getMethod("setPairingConfirmation", boolean.class).invoke(bluetoothDevice, true);

Log.d(TAG,"Success setting pairing confirmtion");
}
catch(Exception e){
Log.d(TAG,"Exception: " + e.getMessage());
}
}
catch(Exception e){
Log.d(TAG,"Exception 2: " + e.getMessage());
}

任何信息都会有帮助。谢谢!

最佳答案

不要要求BLUETOOTH_PRIVILEGED,它可以在 Android 7 之前的版本上运行。在这些版本上,只需要 BLUETOOTH_ADMIN。然后更改为:https://android.googlesource.com/platform/packages/apps/Bluetooth/+/android-7.0.0_r24

关于java - Android:为什么我无法以编程方式与蓝牙设备配对,即使使用 BLUETOOTH_PRIVILEGED 并设置配对确认,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36920670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com