自从我升级到android 4.2后,当我尝试配对设备时我遇到了问题设备应该配对但现在它说需要across_user_permission.
这是错误日志:
错误:代码3:
java.lang.SecurityException ::
Permission Denial:来自android的广播请求以用户-1运行但是从user0调用; 这需要
android.permission.INTERACT_ACROSS_USERS_FULL或
android.permission.INTERACT_ACROSS_USERS.
在这里我的方法:
public boolean ensurePaired(BluetoothDevice bd) {
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(bd.getAddress());
boolean paired = false;
Log.d(TAG,"Pairing with Bluetooth device with name " + device.getName()+" and address "+device.getAddress());
try {
Method m = device.getClass().getMethod("createBond");
paired = (Boolean) m.invoke(device);
} catch (Exception e)
{
return paired;
}
Log.d("BluetoothPlugin -", "Returning "+ "Result: "+paired);
return paired;
}
Run Code Online (Sandbox Code Playgroud) 最近,我尝试让配对过程以编程方式工作,并且成功了。但我最近发现我的应用程序的用户可以连接到几个“有趣的”设备。所以我必须提示用户选择要连接的设备
所以我必须将用户连接到已经配对的蓝牙设备。但我的努力都没有效果。我尝试使用以下命令再次运行配对过程:
tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
还有以下内容:
Method m = mmDevice.getClass().getMethod("createRfcommSocket", new Class[] {int.class});
mmSocket = (BluetoothSocket) m.invoke(mmDevice, 1);
Run Code Online (Sandbox Code Playgroud)
这是我已经实现的方法,也是将我的手机与嵌入式蓝牙设备配对的唯一有效方法
所以我的问题是:
我正在尝试制作一个实际配对安全的BLE设备.据我所知,传输加密(使用AES)在所有版本的BLE中都是安全的,一旦交换了"长期密钥".
BLE 4.1及更早版本使用对称加密技术,密码(PIN)只有6位数,因此在配对上被动窃听是非常简单的,强制密码并从中获取LTK.这似乎是设计不安全因为人们认为低功率BLE设备没有足够的能力进行非对称加密.
BLE 4.2增加了"安全连接".这显然也被打破了,并且在2008年蓝牙2.1中使用相同的配对方法时,它被打破了!它并不完全打破配对 - 只有密钥输入方法 - 你只学习密码,而不是LTK.但是,如果每次配对尝试都没有更改密钥,它确实允许攻击者执行MitM攻击.
带外配对方法将是一个很好的选择,然后我可以使用QR码或其他东西.但是,在Android或iOS上没有公共API来访问OOB方法.Android支持通过NFC进行OOB配对,但iOS不支持,所以就这样了.
似乎剩下的唯一选择是实现自定义加密方案,但这是一项荒谬的工作量.
我的问题是:
为什么蓝牙技术联盟在BLE 4.2中指定了配对方法,这种方法在6年前就已经不安全了?
是否有任何现有的BLE加密方案可以保护它?理想的开源和经过充分测试,但可以是商业的.我还能使用关贸总协定吗?
我正在使用 Apple 的 Core Bluetooth 示例代码(此处稍作修改)来扫描低功耗蓝牙设备并连接到我想要的设备。在第一次连接时,这会显示 iOS 配对对话框。此外,如果设备被遗忘,然后被扫描并再次连接,则会再次显示配对对话框。
对话框不是在[central connectPeripheral]被调用时出现,而是在第一次调用[peripheral setNotifyValue:YES forCharacteristic:c]或 时出现[peripheral writeValue:data forCharacteristic:c]。
有没有办法判断配对对话框是否会在它出现之前出现?(即操作系统是否存储了特定外围设备的配对信息?)
我需要在执行任何一个可能会打开对话框的调用之前知道该对话框是否会出现,以便我可以向用户显示一些说明。
我想将我的蓝牙低功耗运动手表 (Suunto Ambit 3) 与我的 Raspberry PI 3 B V1.2 配对 我使用的是 RaspianOS 版本 10 buster,内核版本为 5.4.79-v7+ 此操作系统包含版本 5.50 中的 bluez 堆栈它是通过 apt-get 从预定义的包安装的。
通常,BLE 配对是通过 Android 和 IOS 下的智能手机完成的。在进行配对过程时,手表会提供一个必须由智能手机输入的密码。使用 Android 下的 nRFConnect 应用程序,配对工作正常。当我在树莓派上运行 hcitool 并且手表处于配对模式时,它会出现。
sudo hcitool -i hci0 lescan
sudo bluetoothctl但是当我尝试使用我的设备运行该命令时,该命令scan on没有出现,并且与正确的 MAC 地址配对也不起作用。其他设备仍然出现在 bluetoothctl 中我也查看了https://github.com/raspberrypi/linux/issues/3689但这似乎只与较新的树莓派型号有关。
是否知道是什么阻碍了我的设备在 bluetoothctl 扫描模式下被发现,或者我可以做什么来将我的设备与启用了 PIN 码的设备配对?
一般问题
首先让我们更一般地解释这个问题。我有一组具有 x,y 坐标的点,并希望找到最佳的唯一邻居对,以使所有对中的邻居之间的距离最小化,但点不能用于多于一对。
一些简单的例子
注意:点不是有序的,x 和 y 坐标都在 0 到 1000 之间变化,但为了简单起见,在下面的例子中 x==y 和项目是有序的。
首先,假设我有以下点矩阵:
matrix1 = np.array([[1, 1],[2, 2],[5, 5],[6, 6]])
Run Code Online (Sandbox Code Playgroud)
对于这个数据集,输出应该是[0,0,1,1]点 1 和 2 彼此最接近,点 3 和 4 提供对 0 和 2。
其次,两点不能有相同的伙伴。如果我们有矩阵:
matrix2 = np.array([[1, 1],[2, 2],[4, 4],[6, 6]])
Run Code Online (Sandbox Code Playgroud)
这里 pt1 和 pt3 最接近 pt2,但 pt1 相对更近,所以输出应该再次是[0,0,1,1].
第三,如果我们有矩阵:
matrix3 = np.array([[1, 1],[2, 2],[3, 3],[4, 4]])
Run Code Online (Sandbox Code Playgroud)
现在 pt1 和 pt3 再次与 pt2 最接近,但现在它们处于相同的距离。现在输出应该再次是[0,0,1,1]pt4 最接近 pt3。
第四,在点数为奇数的情况下,最远的点应该是nan,例如
matrix4 = np.array([[1, 1],[2, 2],[4,4]]) …Run Code Online (Sandbox Code Playgroud) 在带有createInsecureRfcommSocketToServiceRecord()API的Android 2.3.3 BluetoothChat示例中,即使未提供PIN码,仍然会提示用户接受配对请求。
有没有一种方法可以自动进行蓝牙配对请求,而无需用户干预?还是出于安全考虑这永远不可能?我已经在网上找了两天了,还没有发现太多东西,所以如果有人知道,请发表。
谢谢!
如果我有一个元组的输入,其中包含两个相同长度的整数列表,并且我希望我的输出是这两个列表的压缩列表,那么从元组中提取这两个列表后,如何将每个单独的元素压缩为一个列表?例如,如果我的输入是twolists= ([1;2;3], [4;5;6]),那么我希望我的输出是[(1,4); (2,5); (3,6)]。如何压缩每个元素并将其添加到我的输出中?函数名称和类型如下:
let rec pairlists twolists = ...
val pairlists : 'a list * 'b list -> ('a * 'b) list = fun
Run Code Online (Sandbox Code Playgroud)
到目前为止我有:
let rec pairlists twolists =
let (l1, l2) = twolists in
let rec zip (l1,l2) =
match l1 with
|[] -> l2
|x :: xs -> x :: zip(l2, xs) in
twolists ;;
Run Code Online (Sandbox Code Playgroud)
但这显然不是我想要的。
我正在尝试使用 Xcode 14 在我的 iPhone 上构建一个应用程序。
该应用程序正确构建并在模拟器上启动没有问题。然而,当我将 iPhone 13 连接到代码设备窗口时,它显示为“iPhone 最近重新启动”。当我运行该应用程序时,我收到一条错误消息:“运行目标 iPhone 对于运行该方案无效。” iPhone 最近重新启动了 Xcode,当 iPhone 解锁时,Xcode 将继续运行。
手机最近没有重新启动并且已完全解锁。
我发现这是 Xcode 9 的常见问题,但该问题的任何建议都无法解决 Xcode 14 上的问题(例如取消配对和修复设备)。有人知道如何解决这个问题吗?
我正在阅读" 执行常见的中心角色任务",它有关于如何发现外围设备以及如何连接到外围设备的信息,但我似乎无法找到如何检查用户是否在弹出窗口中选择取消或配对,因为弹出窗口出现时我打电话[myCentralManager connectPeripheral:peripheral options:nil];.如果用户单击"对"弹出窗口中的"取消",我希望不连接到(或断开连接)外围设备.我可以通过其他方式调用配对弹出窗口吗?
我必须在参考地址(PostGreSQL 数据库中大约有 3000 万个)和包含其他地址的文件(每个月有许多文件,每个文件包含数百万个地址)之间进行配对。
我已经设法在 SolR 中导入参考地址,搜索引擎很棒。有没有一种方法可以创建一个处理程序或插件来非常快速地为文件的每一行进行配对?
我不能使用 REST API 在 SolR 上执行数百万个 http 请求,这太慢了。我只想将结果作为“id 配对”,例如,如果文件“somefile.csv”的 ID 17 地址与引用地址的 IDS 36、452 和 13456 匹配,这就是我需要检索的全部内容,我可以询问有关更多信息的数据库稍后。
我想用 Java 来做,但任何其他语言也是可能的。
我有一个使用 Bluez 5.X 和 DBus 在嵌入式设备上运行的应用程序。
\n\n我的应用程序将具有“NoInputNoOutput”功能的代理和适配器设置为不可配对(我不想配对)。
我的嵌入式设备不发起连接(GAP 外围设备)和广播广告(GATT 服务器)。
使用 BlueZ 5.48(和 5.52),当我尝试从 Android 设备连接到我的嵌入式设备时,一切正常,但当我尝试使用 iOS 时,连接在一段时间后丢失,并且在 btmon 工具中存在以下日志:
\n\n> ACL Data RX: Handle 68 flags 0x02 dlen 9 #1050 [hci0] 398.940027\n ATT: Error Response (0x01) len 4\n Read Request (0x0a)\n Handle: 0x0016\n Error: Insufficient Authentication (0x05)\n< ACL Data TX: Handle 68 flags 0x00 dlen 7 #1051 [hci0] 398.940268\n ATT: Read Request (0x0a) len 2\n Handle: 0x0016\n> ACL Data RX: Handle …Run Code Online (Sandbox Code Playgroud)