我有一个Windows 7应用程序,它使用Stollmann SDK成功地将PC与Android绑定.蓝牙MAC地址,哈希和随机化器的双向交换通过NFC 在带外进行:
遗憾的是,Windows应用程序的源代码无法在此处共享.在Android端,一旦收到NDEF消息,就不需要应用程序,安全简单配对由操作系统(通过HandoverManager?)执行application/vnd.bluetooth.ep.oob
.
现在我正在尝试创建一个Android应用程序,它将使用单向身份验证通过扫描的QR代码(而不是NFC)执行OOB配对.
自定义QR码将显示在PC屏幕上(由ZXing.Net生成)并包含蓝牙MAC地址,散列和随机发生器.
然而,在Android中似乎尚未实现OOB绑定 -
/**
* Read the local Out of Band Pairing Data
* <p>Requires {@link android.Manifest.permission#BLUETOOTH}
*
* @return Pair<byte[], byte[]> of Hash and Randomizer
*
* @hide
*/
public Pair<byte[], byte[]> readOutOfBandData() {
if (getState() != STATE_ON) return null;
//TODO(BT
/*
try {
byte[] hash;
byte[] randomizer;
byte[] ret = mService.readOutOfBandData(); …
Run Code Online (Sandbox Code Playgroud) 我一直在网上搜索,并没有看到任何关于如何准确实现OOB配对的方法.我希望有人能指点我一些示例代码来帮助我.Android开发者网站中的聊天示例根本没有真正涉及这种类型的配对.
基本上,我有一个Android平板电脑,我想安全地与一个用C++编写的设备配对,没有内置的显示/ IO机制.要配对的平板电脑将充当GUI/IO接口,我将通过蓝牙发回消息和第四个消息.因此,我想通过OOB配对方案将平板电脑与每台设备进行安全配对.
我理解OOB的概念,但是当我在android.developers.com网站上查找我的Android客户端代码时,我很难找到适当的方法来调用.另外,在查看bluez的东西时,我找不到太多可以继续使用我的C++编写的服务器.
基本用例是用户将通过USB连接将平板电脑连接到设备.USB连接将有助于传递每个设备的密钥/ mac地址,然后使用该信息对蓝牙.
我可以弄清楚USB部分,但是一旦我在客户端和服务器上获得密钥和必要信息,我似乎无法找到正确的方法来调用两端成功并安全地配对.
我已经有一个客户端/服务器通过不安全的连接进行通话,所以我遇到的唯一问题就是两端的实际配对.一旦我配对,我就可以使用secureRFComm来完成我未来的所有消息传递.
我已经在GitHub上为这个问题准备了一个简单的测试项目。
我正在尝试创建一个Android应用,该应用将从计算机屏幕扫描QR码,然后使用数据(MAC地址和PIN或哈希)与蓝牙设备轻松配对(绑定)。
与流行的InstaWifi应用类似-但适用于经典蓝牙。
出于测试目的,我尚未执行任何条形码扫描,而仅显示设备列表:
用户触摸其中一台设备后,将在MainActivity.java中尝试配对:
private void startBluetoothPairing(BluetoothDevice device) {
Intent pairingIntent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
BluetoothDevice.PAIRING_VARIANT_PIN);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_KEY, 1234);
//device.setPin(new byte[]{1,2,3,4}); <- DOES NOT CHANGE ANYTHING
//device.setPairingConfirmation(false);
startActivityForResult(pairingIntent, REQUEST_BT_SETTINGS);
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,弹出窗口仍然要求输入PIN:
因为我实际上已经在源代码中指定了PIN,所以我实际上希望显示另一个更简单的系统对话框(在进行NFC OOB配对时会显示该对话框):
通过搜索解决方案,我知道有一个setPin()方法,但是它在这里不适用(或者是?)-因为我正在尝试将整个智能手机与蓝牙设备配对,而不仅是与应用程序配对...
我的问题:如何使Android OS显示简单的“取消/配对”对话框?
在GitHub上搜索蓝牙配对请求字符串未显示任何提示...
更新:根据unrealsoul007的建议(感谢),我已经在MainActivity.java中更新了源代码,现在显示了简单的“取消/配对”对话框:
private void startBluetoothPairing(BluetoothDevice device) {
Intent pairingIntent = new Intent(BluetoothDevice.ACTION_PAIRING_REQUEST);
pairingIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, device);
pairingIntent.putExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT,
BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION);
pairingIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(pairingIntent, REQUEST_BT_PAIRING);
}
Run Code Online (Sandbox Code Playgroud)
但是我不确定如何完成配对过程-因为甚至在关闭对话框之前onActivityResult
都会调用resultCode=0
:
@Override …
Run Code Online (Sandbox Code Playgroud) android bluetooth android-intent android-bluetooth bluetooth-oob