在使用信标(iOS设备)进行测试时,我发现侦听器信标会发出一些意外行为.locationManager:即使信标进入某个区域,也不会调用didEnterRegion方法.但是locationManager:didRangeBeacons:inRegion:被正确调用,并在那里显示检测到的信标.有没有人经历过这样的事情.
使用带有CoreBluetooth的BLE(没有iBeacon),有没有办法在设备收到蓝牙信号时唤醒应用程序未运行的应用程序?
我正在使用redbearlab的BLE Shield(http://redbearlab.com/bleshield/)模拟一个灯塔.
谢谢,DAN
*更新03/05/14*
看起来苹果已经推出了iOS 7.1的主要更新:现在,如果iOS检测到与您的应用匹配的UUID,它将为您打开应用.该应用程序只需要安装,它不必运行(AppDelegate中的逻辑需要响应唤醒呼叫).
ios core-bluetooth bluetooth-lowenergy cbcentralmanager ibeacon
iOS7设备是否可以充当iBeacon,并了解其他iOS7设备何时进入其范围?那些其他iOS7设备是否需要打开蓝牙?
我正在编写iOS应用程序,要求应用程序同时宣传iOS iBeacon以及广告外围服务.有必要公布该服务,而不是在外设上可以发现,因为用例需要中央(用BLE说法)在被iOS唤醒(但仍在后台)后由于接近iBeacon而连接到外设.在中央运行的后台应用程序只能通过可用服务发现外围设备,而不是发现所有外围设备[]; 我的代码用于宣传服务或iBeacon,但我还没有弄清楚如何同时做两件事.iBeacon可能使用了32字节的38字节可用空间而且根本就没有
这工作(灯塔):
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
major:1
minor:1
identifier:@"bentboolean"];
NSMutableDictionary *dict = [[self.beaconRegion peripheralDataWithMeasuredPower:nil] mutableCopy];
[self.peripheralManager startAdvertising:dict ];
Run Code Online (Sandbox Code Playgroud)
这工作(服务):
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setValue:@[serviceUUID] forKey:CBAdvertisementDataServiceUUIDsKey];
[self.peripheralManager startAdvertising:dict ];
Run Code Online (Sandbox Code Playgroud)
将两者加在一起,尝试同时宣传两种服务是行不通的.它只宣传Beacon,而不是服务:
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid
major:1
minor:1
identifier:@"bentboolean"];
NSMutableDictionary *dict = [[self.beaconRegion peripheralDataWithMeasuredPower:nil] mutableCopy];
[dict setValue:@[serviceUUID] forKey:CBAdvertisementDataServiceUUIDsKey];
[self.peripheralManager startAdvertising:dict ];
Run Code Online (Sandbox Code Playgroud)
谢谢参观!
我想在用户进入某个区域时发布通知.但是,由于同样的两个CLLocationManagerDelegate方法,我很困惑.我该如何正确使用这两种方法?
有人说如果应用程序在该区域开始,则需要"didDetermineState"方法来开始区域观察.
谢谢,
- (void)locationManager:(CLLocationManager *)manager
didEnterRegion:(CLRegion *)region
{
[self sendNotification:@"didEnterRegion"];
}
- (void)locationManager:(CLLocationManager *)manager
didDetermineState:(CLRegionState)state
forRegion:(CLRegion *)region
{
switch (state) {
case CLRegionStateInside:
[self sendNotification:@"didEnterRegion"];
break;
case CLRegionStateOutside:
break;
case CLRegionStateUnknown:
break;
default:
break;
}
}
Run Code Online (Sandbox Code Playgroud) 我正在创建一个应用程序,它可以获取范围内所有BLE设备的UUID.我已经在Android中运行良好,它给我的广告数据作为字节数组.现在我想在iOS中做同样的事情.
我正在运行扫描并且它正在检测设备,并且在回调中有一个名为advertisementData的NSDictionary.但其中唯一的信息如下:
kCBAdvDataChannel = 39;
kCBAdvDataIsConnectable = 1;
kCBAdvDataLocalName = jaalee;
kCBAdvDataTxPowerLevel = 0;
Run Code Online (Sandbox Code Playgroud)
我是否正确地认为我应该获得整个广告包?如果没有,我怎么能得到它?
我正在我的cordova项目中使用Cordova/Phonegap iBeacon插件和ionicframework.当应用程序被杀死时,我正在尝试使用cordova本地通知插件在android和ios上发送本地通知.
这是我的代码:
document.addEventListener("deviceready", onDeviceReady, false);
function didDetermineStateForRegion(pluginResult) {
}
function didStartMonitoringForRegion (pluginResult) {
}
function didExitRegion(pluginResult) {
$cordovaLocalNotification.add({
id: 30244234234,
title: "Good By!",
text: "Hope to see you again."
}).then(function () {
});
}
function didEnterRegion (pluginResult) {
$cordovaLocalNotification.add({
title: "Welcome",
text: "Tap to launch app"
}).then(function () {
});
};
function didRangeBeaconsInRegion (pluginResult) {
}
function onDeviceReady() {
// Now safe to use device APIs
function createBeacon(uuid,nofiyState) {
var uuid = uuid; …Run Code Online (Sandbox Code Playgroud) 我在网上看到了新发布的iOS 7.1的iBeacon支持.
特别:
我无法通过自己的测试来确认这些声明中的任何一个.事实上,我似乎不太可能从锁定的设备获取didEnterRegion/didExitRegion通知.(更准确地说,我似乎得到了didEnterRegion通知,但没有得到didExitRegion通知).这可能是因为Apple让我删除了我的info.plist中的BLE背景模式条目 - 我不完全确定.我还在努力解决这个问题.
我正在使用自定义BeaconManager委托,因此信标范围不是由视图控制器的生命周期决定的.一切都很好但每隔一段时间(1-2天)的灯塔范围就会停止工作,并且不会被称为执行范围.解决这个问题的唯一方法是让我重置我的iPhone,一旦我这样做,它就完美无缺.下面是我正在使用的代码.基本流程是,当我的ViewController调用ViewDidLoad时,它会向AppDelegate发送一个通知,告诉它开始为信标设置范围,我从不告诉它停止,因为我希望它继续为信标范围而不管用户导航的位置在应用程序中.我想知道我的代码是否导致了这个问题,或者这只是蓝牙的一个错误.谢谢你的帮助!
BeaconManager.m
#import "BeaconManager.h"
#import "AppDelegate.h"
@interface BeaconManager()<CLLocationManagerDelegate>
@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) CLBeaconRegion *beaconRegion;
@end
@implementation BeaconManager
+ (id)sharedManager
{
static BeaconManager *sharedBeaconManager = nil;
static dispatch_once_t once;
dispatch_once(&once, ^{
sharedBeaconManager = [[self alloc] init];
});
return sharedBeaconManager;
}
- (id)init
{
self = [super init];
if(self)
{
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
}
return self;
}
- (void)startBeaconMonitoring:(NSString*)forUUID
{
NSUUID * uuid = [[NSUUID alloc] initWithUUIDString:forUUID];
self.beaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:uuid identifier:@"com.beacons.publicRegion"]; …Run Code Online (Sandbox Code Playgroud) 我正在构建一个框架,我需要导入一些objective-c框架,现在我需要导入"Beaconstac.framework",但因为我们无法在swift框架项目中添加桥接头,所以我的问题是如何使用它我的项目中的框架在我试过的项目中无法直接访问
进口Beaconstac
但它给出错误"没有这样的模块"
有没有替代方法呢?