我正在尝试连接蓝牙BTLE设备.我发现外设没有问题.
但是,当我尝试连接到外围设备时,我收到了以下警告.
2013-04-05 22:10:36.110 CoreBluetooth [警告] 7DA9E322-D710-081B-4A9D-526DE546B13C,名称="Find My Car Smarter",IsConnected = NO>在连接时被解除分类
此外,没有相关的委托方法被调用:
didConnectPeripheral:
didFailToConnectPeripheral:
Run Code Online (Sandbox Code Playgroud)
几个小时我一直在努力...请帮助.
我试图在NEXUS 9中做广告并得到ADVERTISE_FAILED_DATA_TOO_LARGE的错误.在成功通告后添加服务时,它工作得非常好但是如果我通过"广告数据"构建器添加服务以便其他设备可以在扫描时进行过滤,则会收到错误代码1,即ADVERTISE_FAILED_DATA_TOO_LARGE
a)工作准则
public void startAdvertisingService() {
AdvertiseSettings settings = new AdvertiseSettings.Builder()
.setTxPowerLevel(AdvertiseSettings.ADVERTISE_TX_POWER_HIGH)
.setTimeout(0)
.setAdvertiseMode(AdvertiseSettings.ADVERTISE_MODE_LOW_LATENCY)
.build();
AdvertiseData.Builder advertiseData = new AdvertiseData.Builder();
advertiseData.setIncludeDeviceName(true);
BluetoothLeAdvertiser myBluetoothLeAdvertiser = btAdapter.getBluetoothLeAdvertiser();
myBluetoothLeAdvertiser.stopAdvertising(mAdvertiseCallback);
myBluetoothLeAdvertiser.startAdvertising(settings, advertiseData.build(),mAdvertiseCallback);
}
private AdvertiseCallback mAdvertiseCallback = new AdvertiseCallback() {
@Override
public void onStartSuccess(AdvertiseSettings settingsInEffect) {
super.onStartSuccess(settingsInEffect);
BLEBroadcast();
}
@Override
public void onStartFailure(int errorCode) {
String description = "";
if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED)
description = "ADVERTISE_FAILED_FEATURE_UNSUPPORTED";
else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_TOO_MANY_ADVERTISERS)
description = "ADVERTISE_FAILED_TOO_MANY_ADVERTISERS";
else if (errorCode …Run Code Online (Sandbox Code Playgroud) peripherals android bluetooth bluetooth-lowenergy cbperipheral
我成功发现了外围设备并检索其本地名称:
[advertisementData objectForKey:CBAdvertisementDataLocalNameKey]
Run Code Online (Sandbox Code Playgroud)
但是,如果外围设备停止并重新启动具有不同本地名称的广告,则客户端无法识别该更改.我猜
- (void)peripheralDidUpdateName:(CBPeripheral *)peripheral
Run Code Online (Sandbox Code Playgroud)
仅在两个设备配对时才有效.有没有办法在没有配对的情况下获得更新?
我正在研究一个需要我的Mac将一些数据发送到我的iOS设备的想法.我知道CoreBluetooth框架不适用于Mac OS,只适用于iOS,所以有什么方法可以让我的Mac构成一个外围设备?
我做了一些谷歌搜索 - 没有得到一个直接的答案:(
我在视图控制器SViewController中设置了几个BLE连接,我需要存储外围设备以便在其他视图控制器中使用.我已经尝试创建一个NSUserDefault对象并在那里存储外围设备,但是我收到了错误"Attempt to insert non-property value",它从未插入过.然后我尝试将其包装在NSData对象中并将其存储在NSUserDefaults中,但是得到了错误"-[CBConcretePeripheral encodeWithCoder:]: unrecognized selector sent"并且应用程序崩溃了.这绝对没有用.我也尝试将三个CBPeripheral变量全局化,但我遇到了很多问题.(我对编程还很新).然后我以某种方式调查了它们,但是在这里读到它不会工作并且不浪费时间.
有谁知道如何存储CBPeripheral对象,以便我可以访问它并在其他视图控制器中初始化它?
objective-c ios core-bluetooth bluetooth-lowenergy cbperipheral
我搜索了一下,发现这可能是一个重复的问题:
我的问题是:
我有多个服务,它们共有大约30-40个特征(是的,我需要所有这些...).作为处理CoreBluetooth的起点,我总是使用Apple示例代码(CoreBluetooth温度传感器).
发现和服务/特征处理分为两类,这只适用于几个特征.但是在一个类中处理这么多的特性并不是我在"良好的软件设计"中所理解的.
进入脑海的第一个想法是为每个服务创建一个类.但不幸的是,CBPeripheral只能同时拥有一个CBPeripheralDelegate.这意味着我不能把它分成几个类.
(如果BLE是获取此类数据的正确技术,我们不必开始讨论 - 事实并非如此.但是有些制造商使用BLE,因此他们不必为MFi计划烦恼......)
我还阅读了最终提供的CoreBluetooth编程指南,但它只描述了基本的工作流程 - 没有关于正确的设计.
我正在寻找一个很好的设计方法.您可能有任何建议,提示或示例代码链接?提前谢谢了!
architecture software-design ios core-bluetooth cbperipheral
感觉我在这里遗漏了一些东西,但是如何获得关于配对受密码保护的外围设备失败还是成功的反馈?
当我连接受密码保护的外围设备时,弹出密码UIAlertView并连接外围设备(didConnectPeripheral),并立即断开连接(didDisconnectPeripheral).
[bluetoothManager connectPeripheral:peripheral options:nil];
Run Code Online (Sandbox Code Playgroud)
现在我是否输入正确的密码,错误的密码或只是按下取消:在任何情况下我都没有收到来自CoreBluetooth委托方法的任何反馈.
问题是如何获得有关此过程的反馈?
因此,有一种方法可以监控CBCentralManagervia的状态变化centralManagerDidUpdateState().但有没有类似的方法调用监视状态更改CBPeripheral?我在CoreBluetooth库中找不到任何暴露的东西,我想在每次CBPeripheralState更改时调用一个函数.
现在我只有一个switch语句来检查外设状态,但它总是只返回连接或断开连接.我如何进入连接/断开连接的情况?我已经尝试将我的switch语句放在我的代码的各个部分,从bleInit()方法到startScanning(), connectToPeripheral()等等
switch(peripheral.state){
case .disconnected:
print("disconnected")
case .connecting:
print("connecting")
case .connected:
print("connected")
case .disconnecting:
print("disconnecting")
default: break
}
Run Code Online (Sandbox Code Playgroud) 是否有可能在您的应用程序中收到特定UUID的BLE通知,或者在应用程序未运行时任何UUID进入范围?例如推送通知的工作方式相同吗?
我试图谷歌,但到目前为止,没有任何有用的信息,我可以实现.有什么指针吗?
我在使用更新服务的CBPeripheral时遇到了一些问题:我的物理设备有一个更新广告服务的按钮,但我的应用程序仍然在委托方法中读取旧服务didDiscoverServices.
虽然当我发现外设时didDiscoverPeripheral,我可以看到服务是最新的.
如果我再次运行应用程序,旧服务仍然存在!似乎让我的应用程序发现新服务的唯一方法是关闭蓝牙并重新打开.即使卸载/重新安装我的应用程序也是不够的.
iOS会永久缓存服务吗?有没有办法重置/擦除缓存?
cbperipheral ×10
ios ×8
bluetooth ×3
objective-c ×2
android ×1
architecture ×1
iobluetooth ×1
ios6 ×1
ios7 ×1
macos ×1
peripherals ×1
swift ×1
swift3 ×1