- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在我的 iBeaconReceiver
应用程序中,我试图监控超过 1 个区域,并且我使用了这段代码
- (void)viewDidLoad
{
[super viewDidLoad];
// Initialize location manager and set ourselves as the delegate and beacons dictionary
_beacons = [[NSMutableDictionary alloc] init];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
self.myBeaconRegion = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"6C1AA496-1653-403D-BD1E-7F630AA6F254"] major: 1 minor: 1 identifier: @"region1"];
self.myBeaconRegion2 = [[CLBeaconRegion alloc] initWithProximityUUID:[[NSUUID alloc] initWithUUIDString:@"6C1AA496-1653-403D-BD1E-7F630AA6F254"] major: 1 minor: 2 identifier: @"region2"];
NSLog(@"startMonitoring");
// Tell location manager to start monitoring for the beacon region
[self.locationManager startMonitoringForRegion:self.myBeaconRegion];
[self.locationManager startMonitoringForRegion:self.myBeaconRegion2];
_myBeaconRegion.notifyEntryStateOnDisplay = YES;
_myBeaconRegion2.notifyEntryStateOnDisplay = YES;
// Check if beacon monitoring is available for this device
if (![CLLocationManager isMonitoringAvailableForClass:[CLBeaconRegion class]]){
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Monitoring not available" message:nil delegate:nil cancelButtonTitle:@"Ok" otherButtonTitles: nil]; [alert show]; return;
}
}
然后我开始寻找信标
- (void)locationManager:(CLLocationManager*)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
{
if(state == CLRegionStateInside)
{
if([region.identifier isEqualToString:@"region1"])
[self.locationManager startRangingBeaconsInRegion:self.myBeaconRegion];
else if ([region.identifier isEqualToString:@"region2"])
[self.locationManager startRangingBeaconsInRegion:self.myBeaconRegion2];
}
}
现在这是我的问题,我创建了一个简单的 UITableView
以这种方式显示我设备范围内的信标
-(void)locationManager:(CLLocationManager*)manager
didRangeBeacons:(NSArray*)beacons
inRegion:(CLBeaconRegion*)region
{
//NSLog(@"didRangeBeacons");
[_beacons removeAllObjects];
NSArray *immediateBeacons = [beacons filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"proximity = %d", CLProximityImmediate]];
if([immediateBeacons count])
[_beacons setObject:immediateBeacons forKey:[NSNumber numberWithInt:CLProximityImmediate]];
NSArray *nearBeacons = [beacons filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"proximity = %d", CLProximityNear]];
if([nearBeacons count])
[_beacons setObject:nearBeacons forKey:[NSNumber numberWithInt:CLProximityNear]];
NSArray *farBeacons = [beacons filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"proximity = %d", CLProximityFar]];
if([farBeacons count])
[_beacons setObject:farBeacons forKey:[NSNumber numberWithInt:CLProximityFar]];
[self.tableView reloadData];
}
使用 _beacons
字典。这是我的场景:
首先,我必须说我正在使用 iPad 作为 iBeacon 天线,能够交替广播 region1
或 region2
。
region1
,一切正常,我的UITableView
中填满了那个beacon的UUID
region1
,启动 region2
,一切正常,我的 UITabelView 现在显示 region2 UUID
region2
并返回广播region1
,UITableView
是空的!找不到信标region1
并重新启动 region2
现在 region2 UUID
显示在我的 UITableView
中。从这一点开始,只有 region2
被我的应用监听,PLUS 我的 UITableView
颤抖(意思是它不稳定)!!!,好像每半秒它会重新加载所有 UI(例如在第 1 点和第 2 点中不会发生的事情)我已经阅读了一些关于这个问题的帖子,用户通过为每个区域使用不同的标识符解决了问题,但我想我使用的是不同的标识符,所以我不明白问题出在哪里!看起来每当它进入 region2
时就会忘记 region1
。
提前致谢
最佳答案
问题是 locationManager: didRangeBeacons: inRegion:
方法会针对您测距的每个区域独立调用。因此,当 iOS 在这两个区域提供有关信标的信息时,该方法将每秒为每个区域调用一次。
这是代码显示的问题,因为行 [_beacons removeAllObjects]
将在每次回调开始时清除字典。考虑其中一个回调可以包含一个空的信标数组。当对两个区域进行测距时,调用的时间是不确定的。因此,您可能会收到一个带有信标列表的回调,显示它,然后在几分之一秒后收到另一个带有空 beacons
数组的回调,导致第一个数组永远不会显示。同样,当两个区域都显示信标时,显示可能会闪烁,具体取决于回调的时间。
解决方案是不要在每次回调开始时清除字典。相反,您必须维护一个不同的字典,其中包含最后一次看到每个信标的时间的时间戳,并定期删除任何信标几秒钟后您的显示器上还没有看到。
关于ios - 监控 2 个或更多区域时出现 iBeacons 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23590703/
我知道 iBeacons 可以将人们发送到应用程序,据我所知,iOS 设备和 Android 设备(4.3+)都可以运行检测它们的应用程序。我想知道是否不是信标将您发送到商店的特定应用程序,而是它是否
Google 的 Proximity Beacon API 文档到处都以 Eddystone 为例: https://developers.google.com/beacons/proximity/r
我们正在与 iBeaons 在跨国多个地点讨论大规模部署方案。提出的问题是 iBeacons 用来宣传其存在的 ID 是否是唯一的?因为我们的客户想要真正确定应用程序只响应特定的 iBeacons,而
我找到了这个关于使用 iBeacon 开发应用程序的好教程: http://www.appcoda.com/ios7-programming-ibeacons-tutorial/ 但是对于这个实现,正
iOS 设备是否可以作为 iBeacon 进行广播并同时监视 iBeacon?我目前正在使用自定义树莓派解决方案执行此操作,并想知道它是否可以转换到设备。 最佳答案 是的,如果应用程序在前台,您可以执
我在网上看到声称新发布的 iOS 7.1 支持 iBeacon。 具体: 系统应该仍会通知您的应用程序didEnterRegion/didExitRegion 事件,即使用户明确杀死你的应用程序。 d
我想知道 iOS 设备是否可以在监听其他 iBeacon 时充当 iBeacon。根据我的阅读,答案似乎应该是“否”,但我非常感谢您给出明确的答案。我会自己测试一下,但我还没有购买额外的 iOS 设备
我正在为 iOS 编写一个应用程序,该应用程序要求该应用程序同时通告 iOS iBeacon 以及通告外围服务。有必要宣传该服务,而不是简单地在外设上发现该服务,因为用例需要中央(用 BLE 术语)在
我正在开发一个 iOS 应用程序,可以检测我周围的 iBeacon 设备。据我了解,我们需要知道特定的 UUID 才能扫描它们。 这里是前任:Search for all iBeacons and n
我已成功修改 reference implementation app Android Beacon Library的使用以下 beacon layout ,以便它检测到我手边的 iBeacon 设备
我正在尝试将 ibeacon 功能集成到 Ionic 2 应用程序中。 我正在使用 https://ionicframework.com/docs/native/ibeacon/插入。 按照文档中提到
我正在尝试编写一个 Cordova 插件,它与 Android 的 Radius Networks iBeacon 库交互。现在,我知道该库是为与 Activity/Service 一起使用而设计的,
我已经检查了以下信标的规范: Eddystone Protocol Specification AltBeacon Protocol Specification v1.0 ibeacon Payloa
我在控制台中有这条消息,但我已经检查了 locationManager.monitoredRegions 和 locationManager.rangedRegions 我的应用程序没有监控到很多区域
我将使用 iOS 7 和蓝牙 4.0 启动 iBeacon 的项目代码。 http://www.appcoda.com/ios7-programming-ibeacons-tutorial/ 准备好上
这个问题已经有答案了: iBeacon / Bluetooth Low Energy (BLE devices) - maximum number of beacons (5 个回答) 已关闭 8 年
我目前有一个应用程序设置可以使用 Azure 通知中心接收远程通知。现在,我想扫描 iBeacons,看看附近是否有特定的 iBeacons,如果是,则不应向用户显示通知。但是,如果看不到信标,用户应
我正在尝试在没有用于测试的实际信标的开发情况下实现 iBeacon。我正在使用“Beacon Bits”,它是在 iPad 上运行的模拟器。我已经尝试过其他信标模拟器来消除模拟器可能是问题的可能性。所
目前我有 3 个发射器和 1 个接收器(4 个设备是 iPhone)设置允许我进行三边测量。 但是,我发现信号波动很大(即使 4 个设备稳定地放在 table 上)。有什么策略可以稳定信号吗? 我应该
我正在使用 tricekit,在他们的示例 sdk 中,我看到了这些背景模式。 我只需要 ibeacon 来触发对我的设备的通知,我应该允许哪些权限? 上次,我允许“充当蓝牙乐配件”,应用商店拒绝了我
我是一名优秀的程序员,十分优秀!