- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试从 Android 连接到我为 Mac OS X 编写的蓝牙外围设备。我在下面有以下代码:
private final BluetoothGattCallback mGattCallback = new BluetoothGattCallback() {
public void onConnectionStateChange(BluetoothGatt gatt, int status, int newState) {
String intentAction;
mBluetoothGatt = gatt;
if (newState == BluetoothProfile.STATE_CONNECTED) {
intentAction = ACTION_GATT_CONNECTED;
mConnectionState = STATE_CONNECTED;
broadcastUpdate(intentAction);
Log.i(TAG, "Connected to GATT server.");
Log.i(TAG, "Attempting to start service discovery: " + mBluetoothGatt.discoverServices());
} else if (newState == BluetoothProfile.STATE_DISCONNECTED) {
intentAction = ACTION_GATT_DISCONNECTED;
mConnectionState = STATE_DISCONNECTED;
Log.i(TAG, "Disconnected from GATT server.");
broadcastUpdate(intentAction);
mBluetoothGatt.setCharacteristicNotification(characteristic, false);
}
}
// New services discovered
public void onServicesDiscovered(BluetoothGatt gatt, int status) {
Log.i(TAG, "onServicesDiscovered received: " + status);
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_GATT_SERVICES_DISCOVERED);
} else {
Log.w(TAG, "onServicesDiscovered received: " + status);
}
}
// Result of a characteristic read operation
public void onCharacteristicRead(BluetoothGatt gatt, BluetoothGattCharacteristic characteristic, int status) {
if (status == BluetoothGatt.GATT_SUCCESS) {
broadcastUpdate(ACTION_DATA_AVAILABLE, characteristic);
}
}
};
上述大部分文档都在 Google 的网站上:
https://developer.android.com/guide/topics/connectivity/bluetooth-le.html#read
但是,我一直在 onServicesDiscovered
上获得状态 129,而且我无法向我的外围设备发送任何数据。上面有什么我做错了吗?看来我正在按照文档进行操作,但我做不到。
编辑
似乎在 API 21 中,Google 对 BLE API 进行了一些更改,但他们没有更新文档(显然对我们开发人员来说非常方便)。我发现以下教程很有帮助:
http://www.truiton.com/2015/04/android-bluetooth-low-energy-ble-example/
基本上,对于 API 21+,您必须使用 BluetoothLeScanner mLEScanner
来扫描附近的 LE 设备。扫描完成后,我们会收到如下回调:
private ScanCallback mScanCallback = new ScanCallback() {
public void onScanResult(int callbackType, ScanResult result) {
Log.i("callbackType", String.valueOf(callbackType));
Log.i("result", result.toString());
onScan(result.getDevice(), 0, null);
}
public void onBatchScanResults(List<ScanResult> results) {
for (ScanResult sr : results) {
onScan(sr.getDevice(), 0, null);
}
}
public void onScanFailed(int errorCode) {
Log.e("Scan Failed", "Error Code: " + errorCode);
}
};
我们可以从 ScanResult
获取设备并将其用于连接,它适用于某些设备但不是全部。我让它可以在我的 Nexus 7 上运行,但不能在我的三星 Galaxy S6 上运行。 Android BLE 是一团糟。
编辑 2
目前我们只使用经典蓝牙而不是低功耗蓝牙。希望谷歌能正确地弄清楚他们的 LE 堆栈。我无法让 BLE 代码在市场上的大多数设备上运行。
即使是 Google 自己的示例代码也能在我测试过的不到一半的设备上运行!
最佳答案
我正在从 android 设备连接到 ios 设备(外围设备)作为中心,我能够读取和写入特性。让我知道,您现在到底在寻找什么!!!
关于android - Android 上的低功耗蓝牙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32534557/
具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 卷积神经网络(CNN)通过从原始数据中自动学习层次特征表示,在图像识别任务中取得了巨大成功。虽然
具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 血压的测量和预测是心脏病患者和有心脏问题的人的一个重要条件,应该保持持续的控制。在这项研究中,基
具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 心血管疾病是最严重的死亡原因之一,每年在全世界造成严重的生命损失。持续监测血压似乎是最可行的选择
大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡给大家介绍的是 恩智浦MCX系列MCU的新品MCXN947 。 自 2015 年恩智浦和飞思卡尔合并成新恩智浦之后,关于它们各
我正在开发一个应用程序,该应用程序接受语音输入,并将该输入与 list 中的已知项目进行匹配。 list 中的每个项目都有一个别名列表,以便长标题的项目可以与较短的名称相匹配。 例如: class P
两个双模蓝牙设备连接时,必须使用EDR,不能并联使用LE。然后必须通过 EDR 链路传输 BT 低功耗 GATT 配置文件。这是我从规范中读到的内容。 但是 iOS EDR 堆栈(在没有 MFi 许可
我正在尝试为 S3 开发蓝牙 4.0 应用程序。问题是,手机的行为就像它甚至没有蓝牙 4.0。它不会发现 4.0 设备,并且无法通过 4.0 设备发现。我在手机设置和应用程序中都尝试过,使用 Broa
我正在寻找一种与 Adafruit bluefruit LE(nRF8001 芯片组)板进行交互的方法,在 Windows 桌面应用程序中使用 c#(据我所知,我无法使用 Windows.Device
我是一名优秀的程序员,十分优秀!