标签: android-bluetooth

蓝牙:服务发现失败

我尝试在我的Android应用程序(运行4.1.2的三星手机:客户端)和我的笔记本电脑(Win7,64位:服务器)之间建立蓝牙连接.服务发现失败时始终失败.

我阅读了关于这个(这里那里)的各种主题,但它没有解决我的问题.

我有两个问题:

  • 什么意思是众所周知的UUID"00001101-0000-1000-8000-00805F9B34FB".应该使用何时/何时使用?
  • 任何建议调查/解决我的问题将不胜感激.

备注:

  • 我试图建立一个安全和不安全的连接(同时失败)
  • 我可以通过设置>蓝牙将我的笔记本电脑和设备配对
  • 正如评论中所建议的那样:我尝试使用随机生成的UUID(但两侧都是相同的)而不是众所周知的 UUID ,但我仍然有完全相同的行为.

我有这些权限

<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
Run Code Online (Sandbox Code Playgroud)

编辑

我没有在客户端编码UUID,而是尝试了以下方法(但仍然得到相同的错误):

UUID uuid = bluetoothDevice.getUuids()[bluetoothDevice.getUuids().length-1].getUuid();
Run Code Online (Sandbox Code Playgroud)

echo-server的UUID始终是数组中的最后一个.

结束编辑

以下是客户端上的相关日志:

08-22 12:30:28.627: ERROR/BluetoothService.cpp(12008): stopDiscoveryNative: D-Bus error in StopDiscovery: org.bluez.Error.Failed (Invalid discovery session)
08-22 12:30:28.647: INFO/BluetoothSocket.cpp(18030): Setting Master socket option
08-22 12:30:28.647: VERBOSE/BluetoothSocket.cpp(18030): ...fd 43 created (RFCOMM, lm = 7)
08-22 12:30:28.687: DEBUG/BluetoothPolicyService(12008): getAllowBluetoothDataTransfer - showMsg: true
08-22 12:30:28.687: DEBUG/BluetoothPolicyService(12008): MDM: isProfileEnabled = true
08-22 …
Run Code Online (Sandbox Code Playgroud)

java android bluetooth android-bluetooth

4
推荐指数
1
解决办法
1万
查看次数

如何通过蓝牙访问相机?

这就是我想要实现的目标.我有2个Android设备,我想通过蓝牙访问第二个摄像头,并在第一个显示预览.

任何提示如何做到这一点?

基本上我想通过蓝牙获得另一个Android设备的相机实例.

camera android android-bluetooth

4
推荐指数
1
解决办法
4244
查看次数

如何通过蓝牙获取远程设备的序列号?

在我的应用程序中,我发现了蓝牙设备,因此得到以下---

  • 蓝牙设备的名称.
  • 蓝牙设备的硬件地址.

这是通过BluetoothDevice为每个发现的设备获取对象并调用 object.getName()和来完成的object.getAddress().

我还想获得每个发现的蓝牙设备的序列号.

我知道要把我自己设备的序列号作为---

android.os.Build.SERIAL
Run Code Online (Sandbox Code Playgroud)

android bluetooth-lowenergy android-bluetooth

4
推荐指数
1
解决办法
5996
查看次数

Android NDK和蓝牙

我是android ndk的新手.那么,是否可以在非root设备上使用android NDK(与SDK或类似相同)使用蓝牙.如果可能的话,请指导我在哪里可以找到更多相关信息.非常感谢.

android android-ndk android-bluetooth

4
推荐指数
1
解决办法
5237
查看次数

Bluetooth GATT - onServicesDiscovered(BluetoothGatt gatt,int status)不包含所有服务

我有连接到的代码,然后尝试发现自定义BLE服务器设备广告自定义服务提供的所有服务.

代码可以使用

  • Nexus 5搭载Android 5.1
  • 三星SM-T320搭配Android 4.4.2
  • 中兴Blade Vec 4G搭载Android 4.4.2

代码不工作

  • 三星SM-T360搭配Android 4.4.4
  • 搭载Android 4.4.2的三星GT-I9195

在发生故障的设备上,它经常发现在一个(两个)广告相同BLE服务的设备上的所有BLE服务.重新启动Android设备和/或摆弄wifi/bt使其发现其他BLE设备上的所有服务但不是第一个(!).

有人知道三星设备有关BLE服务发现的突出问题吗?

有所有服务:

04-16 13:28:00.999: V/ScanningState(9741): onServicesDiscovered()
04-16 13:28:00.999: I/ScanningState(9741): The device has service 00001800-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service 0000180a-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service 0000180f-0000-1000-8000-00805f9b34fb
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba0000-c6b5-11e2-8b8b-0800200c9a66
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba0100-c6b5-11e2-8b8b-0800200c9a66
04-16 13:28:00.999: I/ScanningState(9741): The device has service f0ba1100-c6b5-11e2-8b8b-0800200c9a66
Run Code Online (Sandbox Code Playgroud)

缺少服务:

04-16 14:05:31.179: V/ScanningState(10710): onServicesDiscovered() …
Run Code Online (Sandbox Code Playgroud)

android bluetooth-lowenergy android-bluetooth

4
推荐指数
1
解决办法
2231
查看次数

Android上蓝牙扫描和发现的差异

Android中定义了两种方法来查找蓝牙设备.1.使用bluetoothAdapter.startScan 2. bluetoothAdapter.discover

哪种方法更好.

第二个问题,在onLeScan回调中,如何检查扫描是否已停止.

android android-bluetooth

4
推荐指数
1
解决办法
3941
查看次数

蓝牙配对-如何显示简单的“取消/配对”对话框?

我已经在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

4
推荐指数
1
解决办法
6200
查看次数

Android蓝牙低功耗特性通知计数限制:这是否因设备而异?

上下文

我正在构建一个针对5.0+的Android应用,它使用BLE连接到多个外围设备.这些外围设备中的每一个都具有许多(~10)特性.理想情况下,我想订阅这些特征中每一个特征的变化通知.

但是,我从阅读中理解的是,Android的蓝牙实施对可以激活的同时通知的数量实施了硬性限制.此问题确定了在Android蓝牙实施中定义限制的位置,并且还记录了限制随时间的变化:

最大并发活动通知(BTA_GATTC_NOTIF_REG_MAX):

  • Android 4.3上的4
  • Android 4.4上的7
  • Android 5.0+上的15

Dave Smith在此视频中确认了这些数字,并建议:

  • 这些限制对于设备是全局的(即,如果某个其他应用程序订阅了2个通知,则我的应用程序可用的数量减少2个);
  • 这些限制不应基于Android OS级别以外的任何其他级别(即它们应独立于制造商,实际硬件功能等).

问题

在5.0+设备上进行测试,但是,我发现,我似乎能够成功订阅超过15个通知.到目前为止,我已经观察到:

  • Pixel XL运行7.1.1
  • Galaxy S6运行6.0.1
  • Nexus 5运行5.X

这些通知订阅通过两项措施取得成功:

  1. 关贸总协定的运作状况是GATT_SUCCESS;
  2. 该应用程序能够接收有关所有目标特征的特征变化的通知.

这是好消息.一方面,更多"真实"通知==>减少手动轮询==>更好的用户体验.另一方面,无法创建导致"真实"通知设置失败的条件意味着我无法轻松编写或测试手动回退代码,一旦将此应用程序发布给真实用户,肯定会(?)需要这些代码.

问题

  • 是否期望这种限制忽略行为?(我无法在其他地方找到它.)
  • 是否有任何设备已知最多15个通知我可以用来测试不愉快的路径?

android bluetooth-lowenergy android-bluetooth

4
推荐指数
1
解决办法
2059
查看次数

本地反应打印到蓝牙打印机

是否可以使用react native将文本打印到蓝牙打印机?有蓝牙的库,但目前尚不清楚如何做到这一点.

一些ble库也是

非常感谢您的回复

bluetooth bluetooth-lowenergy android-bluetooth react-native bluetooth-printing

4
推荐指数
1
解决办法
6300
查看次数

Bluetooth HCI Snoop Log未生成Pixel 2

我想启用Bluetooth HCI Snoop日志记录,但是,当我在Developer Settings中启用该选项时,我的内部存储目录中不会显示任何文件.我也查看了该/etc/bluetooth/bt_stack.conf文件,并且没有表示BtSnoop已启用的行或存储Bt Snoop日志文件的位置.我也试过手动启用日志记录,adb shell settings put secure bluetooth_hci_log 1但也没有解决问题.我在Pixel 2上运行Android 8.1.任何实际启用日志记录或任​​何解决方法的方法?

android bluetooth android-bluetooth

4
推荐指数
1
解决办法
5332
查看次数