在带有createInsecureRfcommSocketToServiceRecord()API的Android 2.3.3 BluetoothChat示例中,即使没有显示PIN码,仍会提示用户接受配对请求。
有没有办法在没有用户干预的情况下自动化蓝牙配对请求?或者由于安全问题,这是否永远不可能?我一直在网上看了2天,并没有真正找到太多,所以如果有人知道,请发帖。
谢谢!
答案 0 :(得分:4)
所以,我有这个猜测,如果有人需要在android 4.4.2
中工作的答案 IntentFilter filter = new IntentFilter(
"android.bluetooth.device.action.PAIRING_REQUEST");
/*
* Registering a new BTBroadcast receiver from the Main Activity context
* with pairing request event
*/
registerReceiver(
new PairingRequest(), filter);
和接收器的代码
public static class PairingRequest extends BroadcastReceiver {
public PairingRequest() {
super();
}
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.bluetooth.device.action.PAIRING_REQUEST")) {
try {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
int pin=intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY", 0);
//the pin in case you need to accept for an specific pin
Log.d("PIN", " " + intent.getIntExtra("android.bluetooth.device.extra.PAIRING_KEY",0));
//maybe you look for a name or address
Log.d("Bonded", device.getName());
byte[] pinBytes;
pinBytes = (""+pin).getBytes("UTF-8");
device.setPin(pinBytes);
//setPairing confirmation if neeeded
device.setPairingConfirmation(true);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
并在清单文件中
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
和broadcastReceiver
<receiver android:name=".MainActivity$PairingRequest">
<intent-filter>
<action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
<action android:name="android.bluetooth.device.action.PAIRING_CANCEL" />
</intent-filter>
</receiver>
答案 1 :(得分:3)
不使用标准API,否:如果MAC地址尚未出现在配对数据库中,则始终会出现提示。我被告知如果你有一个已经植根并且具有对蓝牙服务的DBus端点的公共读/写访问权限的设备,你可以解决这个问题,但我从来没有看到实际实现过。
答案 2 :(得分:3)
我遇到了同样的问题,我希望以下代码可以提供帮助: 首先我们需要:
<receiver android:name=".broadcast.PairingRequest">
<intent-filter>
<action android:name="android.bluetooth.device.action.PAIRING_REQUEST" />
<action android:name="android.bluetooth.device.action.PAIRING_CANCEL" />
</intent-filter></receiver>
其次我们需要蓝牙设备类,并且:
public class PairingRequest extends BroadcastReceiver{
@Override
public void onReceive(Context context, Intent intent){
if (intent.getAction().equals("ACTION_PAIRING_REQUEST")) {
BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
byte[] pinBytes = BluetoothDevice.convertPinToBytes("1234");
device.setPin(pinBytes);
}
}
}