gpt4 book ai didi

android - Android 上的低功耗蓝牙

转载 作者:太空狗 更新时间:2023-10-29 14:54:51 25 4
gpt4 key购买 nike

我正在尝试从 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 设备(外围设备)作为中心,我能够读取和写入特性。让我知道,您现在到底在寻找什么!!!

Follow the sample code

关于android - Android 上的低功耗蓝牙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32534557/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com