标签: core-bluetooth

如何通过BLE(蓝牙低功耗)将Android设备连接到iOS设备

我正在尝试制作一个使用Android 新蓝牙低功耗API的应用程序.为此,我开始使用API等级为18的BLE样本.

当我读到Android无法充当外围设备时,我将Android手机置于中央模式,扫描周围的BLE设备.为此,我使用模拟心脏传感器的北欧平台进行了一些测试.一切都以完美的方式运作!

在此之后,我尝试选择iPhone(iOS 7 beta 4)并将其置于外围设备中并模拟心率传感器作为之前的测试.Android应用程序可以看到设备并连接到它.但是在连接激活后,2个设备会在3-4秒内断开连接.除此之外,当我在Android端调用discoverServices()时,不会触发回调!在某些情况下,即使iOS蓝牙芯片处于关闭状态,Android设备也会收到"已连接"事件.这很奇怪.为了证明这一点,我将Nordic Board置于中央模式,并且我能够正确连接到iOS设备,没有任何问题.

会是什么呢?Android或iOS有一些限制,不允许从Android连接到iOS或反之亦然?

谢谢.

编辑:经过一些艰难的测试,我在AOSP页面上提出了一个问题.可以在这里查看

android ios core-bluetooth bluetooth-lowenergy android-4.3-jelly-bean

82
推荐指数
2
解决办法
2万
查看次数

CoreBluetooth应用程序在后台可以做什么?

受试者说的都是,真的.文档,就其本身而言,表明针对在iOS设备上运行的CoreBluetooth框架编写的应用程序可以在其背景权限列表中添加"蓝牙中心",因此在处于非活动状态时处理某种蓝牙事件,但是确切的事件是不送货?

例如:

  1. 我可以与已经建立配对的设备进行通信吗?
  2. 我是否可以发出定期发现请求以查找超出范围/我以前从未见过的设备?(例如,如果我想在遇到新的有趣设备时能够发送通知)
  3. 如果设备超出范围然后又回来怎么办?我是否会在没有用户干预的情况下获得断开连接和连接的事件,或者我是否需要预先制定并让用户明确请求重新连接?

ios core-bluetooth

78
推荐指数
3
解决办法
2万
查看次数

应用程序未运行时的iBeacon通知

我设法制作了一个iBeacon,当信标在范围内时,它会在我的iPhone上触发本地推送通知.当应用程序处于后台模式时,它完全正常工作.

我的问题是:即使应用程序没有运行,我是否可以触发通知,甚至不在后台运行?

我认为这是可能的,但我不确定.如果是这样,我怎么能做到这一点?

谢谢!

ios core-bluetooth ios7 ibeacon

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

在特征上设置通知会导致无效句柄错误

使用CoreBluetooth我想将数据从iPhone发送到Mac.为此,我编写了像iPhone一样的代码作为'Peripheral'和Mac作为'Central'.

它工作得很好,但有时会直接断开连接,然后连续连接和断开连接.

有时当它试图重新连接时,在中心它直接调用'didDisconnectPeripheral'委托方法.但有时它在'didUpdateNotificationStateForCharacteristic'中有错误"句柄无效".

我在网上提到了所有的链接.但我无法解决这个问题.我在iPhone中认为它存储了蓝牙缓存.

请提出解决方法如何解决"句柄无效"错误?

以下是一些重要的方法.

对于Peripheral,我写了如下代码.

在Appdelegate:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
self.peripheral = [[PeripheralServerObject alloc] init];
self.peripheral.serviceUUID = [CBUUID UUIDWithString:@"4w24"];
return YES;
}
Run Code Online (Sandbox Code Playgroud)

在外围对象文件中:

//To Check Bluetooth State
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral {
    switch (peripheral.state) {
        case CBPeripheralManagerStatePoweredOn:
            [self enableService];
            break;
        case CBPeripheralManagerStatePoweredOff: {
            [self disableService];
            break;
        }
}

// To Add characteristics to Service
- (void)enableService
{
[self.peripheral removeAllServices];
 self.service = [[CBMutableService alloc]
                    initWithType:self.serviceUUID primary:YES];

self.authChar =
        [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"a86e"]
                                           properties:CBCharacteristicPropertyNotify
                                                value:nil
                                          permissions:CBAttributePermissionsReadable];


self.respChar =
        [[CBMutableCharacteristic …
Run Code Online (Sandbox Code Playgroud)

macos bluetooth objective-c ios core-bluetooth

57
推荐指数
1
解决办法
2646
查看次数

如何获取可用蓝牙设备列表?

我目前正在创建一个可以使用蓝牙设备的iPhone应用程序(Xcode 4.3.1,IOS 5)!这个应用程序的主要目标是室内导航(建筑物内的GPS不是很准确).

我在这里看到的唯一解决方案(将我的应用程序保存在AppStore上)是尝试扫描可用的蓝牙设备!

我尝试使用CoreBluetooth框架,但我没有获得可用设备的列表!也许我没有正确使用这些功能

#import <UIKit/UIKit.h>
#import <CoreBluetooth/CoreBluetooth.h>

@interface AboutBhyperView : UIViewController <CBPeripheralDelegate, CBCentralManagerDelegate>
{
    CBCentralManager *mgr;
}
@property (readwrite, nonatomic) CBCentralManager *mgr;
@end



- (void)viewDidLoad
{
    [super viewDidLoad];

    mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];
}


- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI {


    NSLog([NSString stringWithFormat:@"%@",[advertisementData description]]);
}

-(void)centralManager:(CBCentralManager *)central didRetrievePeripherals:(NSArray *)peripherals{
    NSLog(@"This is it!");
}


- (void)centralManagerDidUpdateState:(CBCentralManager *)central{ 
    NSString *messtoshow;

    switch (central.state) {
        case CBCentralManagerStateUnknown:
        {
            messtoshow=[NSString stringWithFormat:@"State unknown, update imminent."];
            break;
        }
        case CBCentralManagerStateResetting:
        { …
Run Code Online (Sandbox Code Playgroud)

bluetooth ios core-bluetooth

49
推荐指数
3
解决办法
8万
查看次数

使用BlueZ堆栈作为外围设备(广告商)

  • 目标:使用BlueZ和蓝牙4LE加密狗创建一个外围设备,宣传相当于"Hello World"的蓝牙.

  • 我在哪里:我目前有BlueZ堆栈设置和下载,我可以使用hci工具识别并看到蓝牙适配器.我已经使用了hciconfig leadv,但我只是不太了解它/了解正在发生的事情.

  • 我认为我需要什么帮助:我需要进入下一步.如果有人能指出我对一个好的资源,请指导我,或任何事情,非常感谢.如果我需要做额外的腿(搜索)工作,我可以,但我已经用我能想到的这个问题的许多不同衍生物来搜索Google和SO.

*我将此标记为CoreBluetooth,希望可能是iOS开发者在某些时候对此进行了修改.

编辑:回应评论,说明我的最终目标似乎是谨慎的.我最终希望通过加密狗广告最简单的简单消息/信号,并在iOS设备(CoreBluetooth)上进行选择.我已经能够让iOS方面运行良好(与Linux方面相比,大量文档)但对我来说困难的部分是将此适配器设置为外设.BlueZ堆栈对我来说是一个可怕的谜.

编辑:经过更多的挖掘,我最终偶然发现了这篇文章:Raspberry Pi蓝牙4.0连接.这使我走向GATT服务器的主题,我将继续追求这个话题.

编辑:好吧,所以我继续学习.在过去的几天里,我深入研究了hci*,sdptool和gatttool工具.我已经到了能够设置适配器做广告的程度,"hciconfig hci0 leadv".此时,我可以成功"看到"适配器,但我实际上无法读取任何内容.我甚至没有看到友好的名字.我将保持卡车运输,但一如既往,任何帮助/建议都非常受欢迎.

编辑:相关链接,关于iOS的蓝牙LE的可靠概述. https://developer.apple.com/library/content/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//apple_ref/doc/uid/TP40013257-CH1-SW1

最后编辑:嘿所有,这个链接涵盖了如何使用Raspberry Pi + BlueZ创建iBeacon ... http://www.wadewegner.com/2014/05/create-an-ibeacon-transmitter-with-the-raspberry -pi /

linux bluetooth core-bluetooth bluetooth-lowenergy bluez

49
推荐指数
2
解决办法
5万
查看次数

Xcode中的iPhone模拟器是否支持蓝牙低功耗?

我在新的Mac mini上尝试了一些iOS测试应用程序,它支持蓝牙低功耗.该CoreBluetooth框架在那些使用.但是,我无法让蓝牙在iPhone模拟器中工作,这是Xcode的一部分.

当我分配一个新的CBCentralManager时,centralManagerDidUpdateState:接收CBCentralManagerStatePoweredOff哪个代表蓝牙当前已关闭.

我第一次运行文本应用程序时,打开了一个看起来非常有问题的框(只使用了语言变量,而不是实际文本)和两个按钮.第一个让我进入设置面板,其中有一个启用蓝牙的选项.然而,在我告诉它启用蓝牙后,它只显示旋转动画,它不会完成或取消.即使在重新启动Mac之后,仍然只有旋转动画.盒子也不再打开了.

从本质上讲,我认为iPhone模拟器应该支持蓝牙低功耗.否则,模拟器上的设置应用程序中有一个选项实际上没有意义.此外,中央管理员状态CBCentralManagerStatePoweredOff但不是CBCentralManagerStateUnsupported代表该平台不支持蓝牙低功耗.这也希望可以存在支持.

  • iPhone模拟器是否支持蓝牙低功耗?
  • 如果是,我该如何启用它?

ios ios-simulator ios5 core-bluetooth

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

使用蓝牙LE在iOS和Android之间进行通信

我有一个使用CoreBluetooth的工作应用程序在iPad(中央)和iPhone(外围设备)之间进行通信.我有一项服务有两个特点.我有一台运行最新Android 4.3并支持BTLE的Nexus 7.Android有点迟到了BTLE的潮流,但看起来他们正在接近它,就像iOS的做法一样,最初他们只支持在后续版本中作为外设模式的中心.我可以加载示例Android BTLE应用程序并浏览附近的外围设备.将我的iPhone广告作为外围设备,我可以在Android端附近的外围设备列表中看到CBAdvertisementDataLocalNameKey的值.我可以连接到iPhone,蓝牙符号在连接时从浅灰色变为黑色.连接始终持续10秒,然后断开连接.在Android方面,我应该会在连接时看到可用服务和特征列表.我已经证明Android代码设置正确,因为我可以将它连接到我所拥有的TI CC2541DK-SENSOR硬件,并在连接时列出所有服务和特性.

我花了最后几天对问题进行排查,但没有成功.问题是我无法确定哪个设备出现错误并因此导致断开连接.在连接阶段或服务发现阶段没有来自CBPeripheralManagerDelegate的回调,所以我不知道错误发生在什么时候(如果错误发生在iOS端).在Android方面,调用一个方法来启动服务发现,但是从不调用它们的回调"onServicesDiscovered",这是令人困惑的.有什么方法可以深入了解iOS端BTLE通信的内容,看看发生了什么,并确定发生了什么错误?

ios core-bluetooth bluetooth-lowenergy android-bluetooth android-4.3-jelly-bean

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

iOS Core蓝牙:获取API MISUSE警告

我正在使用Core Bluetooth API在iOS 7中编写测试应用程序.当我测试应用程序时,我发现我收到以下警告消息:

TestBluetooth [626:60b] CoreBluetooth [API MISUSE]只能在开机状态下接受命令

后来我调试了app并发现,警告来自以下代码行:

[manager scanForPeripheralsWithServices:array options:scanOptions];
Run Code Online (Sandbox Code Playgroud)

那么有人可以告诉我为什么我在控制台中收到此消息?

我周围有蓝牙4.0 Android设备,但这个应用程序并没有发现它们作为外围设备.那么为什么它不发现蓝牙4.0 LE Android设备作为外围设备?

bluetooth ios core-bluetooth bluetooth-lowenergy ios7.1

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

使用CoreLocation重要位置监控和CoreBluetooth时电池耗尽

我们已经发布了一个在后台运行的应用程序,并使用CoreBluetooth&CoreLocation自动保存您的停车位置.

在较高的水平,我们的应用程序只是寻找CoreBluetooth断开连接事件并打开GPS,直到我们得到一个位置修复(准确度<= 10米)或最多3分钟(这可能发生在你没有GPS覆盖的地下停车场停车) .然后,我们使用重要位置监控在系统终止我们的应用程序时自动重新启动我们的应用程序.

在我们的开发过程中,我们自己从未看到过电池耗尽问题,但是75%的用户表示他们看到电池消耗很大.10%的支持者回应了民意调查,因此很难确定故障的代表性,但我们的用户占很大比例.http://www.findmycarsmarter.com/forum/viewtopic.php?f=4&t=30

然后,我们发布了一项更新,允许用户禁用重要位置监控,60%的人表示,通过禁用重要位置监控,排放消失.http://www.findmycarsmarter.com/forum/viewtopic.php?f=4&t=42

最初我们不能自己复制排水问题,但我们发现当我们安装了一个简单的应用程序,只需将"重要位置监控"与"查找我的汽车智能"结合使用时,我们就会间歇性地看到排水管重现.在排水状态下,手机不会进入休眠状态.这表示即使手机已进入睡眠状态且显示屏已关闭,(设置 - >使用 - >自上次完全充电以来的时间)的使用时间也会继续增加.有些东西会阻止系统进入休眠状态.在这个阶段,电池每小时消耗约15%.这种排水间歇地出现,似乎在一两个小时后自行消失,然后再次随机出现.我们还没有找到一种可靠性来重现排水的方法.

我们认为问题是由多个客户调用CoreLocation引起的.我们询问了一些遇到此问题的用户擦拭手机并只安装了我的Find My Car Smarter应用程序.只安装了这个应用程序,排水管没有展出.我们还有其他报告称,当我们的应用与谷歌纵横或Facebook等一起使用时,他们会看到流失.或者如果他们去杀死其他应用程序,那么排水管就会消失.我们已经看到,在没有应用程序启动的情况下,耗电会持续通过电源循环.这意味着它必须是一个系统级服务,以防止操作系统休眠.

尽管我们认为问题是由多个客户端调用到CoreLocation的一些竞争条件引起的,我们从来没有见过的问题与应用程序,只用CoreLocation重现.我们甚至创建了4个或5个不同的应用程序,这些应用程序将同时访问CoreLocation,我们没有看到排放发生.然而,当我们有一个带有CoreLocation的应用程序和带有CoreLocation + CoreBluetooth的第二个应用程序时,我们确实看到了这个问题.可能很少有应用程序使用CoreLocation + CoreBluetooth组合,所以可能这就是为什么更多的开发人员没有遇到这个问题.虽然我们无法解释CoreLocation和CoreBluetooth如何相互作用导致这种消耗以及CoreLocation的第二个应用程序如何进入这个等式.由于排水是间歇性的,所以这可能只是一个侥幸,这个问题只发生在我们使用CoreLocation + CoreBluetooth进行测试时.

在只有这两个应用程序CTM1和FMC安装的擦除5.0.1 iPhone 4S上,我们能够间歇性地进入排水状态.有趣的是,在我们的普通设备上,擦除设备上的排水问题似乎发生的频率要低得多.不幸的是,我们只看了几次排水状态而且没有能够可靠地再现排水管,我们没有良好的控制状态来工作.

我们已经向Apple提交了一份错误报告并开辟了技术支持事件,但也许Stackover社区也可以提供一些见解.我们在5.0.1和5.1 Beta 3中都看到了这个问题.

CTM1 http://www.findmycarsmarter.com/files/CTM1.zip

On Going into the Background
    [locationManager stopUpdatingLocation];
    [locationManager stopUpdatingHeading];
    [locationManager startMonitoringSignificantLocationChanges];

On Re-entering Foreground
    [locationManager stopMonitoringSignificantLocationChanges];
    [locationManager startUpdatingLocation];
    [locationManager startUpdatingHeading];
On didUpdateToLocation
    //do nothing
On didUpdateHeading
    //do nothing
Run Code Online (Sandbox Code Playgroud)

FMC http://www.findmycarsmarter.com/files/FMC.zip

On Going into the Background
    [btleManager stopScan];
    [locationManager stopUpdatingLocation];
    [locationManager stopUpdatingHeading];
    [locationManager …
Run Code Online (Sandbox Code Playgroud)

power-management core-location cllocationmanager ios core-bluetooth

38
推荐指数
1
解决办法
9605
查看次数