我们正处于开发Swift2.2应用程序的高级阶段,因此决定在此期间迁移到2.3并稍后进行完整的Swift 3迁移.但是我们无法在转换到Swift 2.3后获得信标检测工作.方法“didRangeBeacons”不断返回一个空数组.相同的代码在Swift 2.2中工作,因此我们知道我们拥有所有权限等.

此外,如果我们在同一个ipad上打开“定位”应用程序,那么我们的应用程序也会开始在“didRangeBeacons”中返回数据.尝试了各种版本的应用程序,所有Swift2.3应用程序的行为方式都相同.无法弄清楚Locate应用程序正在做什么…在同一条船上的任何人?

这是我们正在使用的代码.我不确定这应该写在这里或评论中,但不能以某种方式将代码放在评论中……

import UIKit
import CoreLocation

class ViewController: UIViewController,CLLocationManagerDelegate {

let locationManager = CLLocationManager()
let region = CLBeaconRegion(proximityUUID: NSUUID(UUIDString: "9735BF2A-0BD1-4877-9A4E-103127349E1D")!,identifier: "testing")
// Note: make sure you replace the keys here with your own beacons' Minor Values


override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view,typically from a nib.
    self.locationManager.delegate = self
    self.locationManager.requestAlwaysAuthorization()
    self.locationManager.startMonitoringForRegion(self.region)
}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // dispose of any resources that can be recreated.
}

func locationManager(manager: CLLocationManager,didStartMonitoringForRegion region: CLRegion) {
    print("didStartMonitoringForRegion")
    self.locationManager.requestStateForRegion(region)
}

func locationManager(manager: CLLocationManager,monitoringDidFailForRegion region: CLRegion?,withError error: NSError) {
    print("monitoringDidFailForRegion")
}

func locationManager(manager: CLLocationManager,didDetermineState state: CLRegionState,forRegion region: CLRegion) {
    print("didDetermineState")
    if state == .Inside {
        //Start Ranging
        self.locationManager.startRangingBeaconsInRegion(self.region)
        self.locationManager.startUpdatingLocation()
    }
    else {
        //Stop Ranging here
        self.locationManager.stopUpdatingLocation()
        self.locationManager.stopRangingBeaconsInRegion(self.region)
    }
}

func locationManager(manager: CLLocationManager,didRangeBeacons beacons: [CLBeacon],inRegion region: CLBeaconRegion) {
    print(beacons.count)
}

}

[更新发布更多尝试以使其工作]
如果我们删除self.locationManager.startMonitoringForRegion(self.region),应用程序在前台模式下工作
并调用self.locationManager.startRangingBeaconsInRegion(self.region)
self.locationManager.requestAlwaysAuthorization()之后直接

这是次优的,因为我们没有进入和退出事件或状态,但至少我们得到了信标计数.

在iOS 10上有许多关于信标检测问题的轶事报告.症状包括:

>不正确的区域退出事件,尤其是当应用程序在后台时,如果按下肩部按钮,则会显示输入事件.
>远程信标检测中的周期性丢失,当信标在附近时,回调提供空信标列表.
>当针对iOS 9.x运行不同的信标测距或检测应用程序时,远程信标回调会返回正确的结果.

这可能是一个将在iOS更新中修复的错误.在此之前,一些用户已经报告将XCode中的应用程序部署目标设置为9.x将解决该问题.

ibeacon – 用于Beacon检测的Swift2.3代码的更多相关文章

  1. ios – 在区域监控时检测iBeacon需要多长时间?

    采取这种情况:用户在口袋里有一个通过iBeacon的iPhone.她的手机是区域监控.应用程序被唤醒时,现实世界需要多少时间才能进入该地区?

  2. ios – iBeacon:didEnterRegion和didDetermineState(CLRegionStateInside)之间有什么区别?

    当用户进入某个地区时,我想发布通知.但是,由于同样的两个CLLocationManagerDelegate方法,我很困惑.如何正确使用这两种方法?有些人说如果应用程序在该区域启动,则需要“didDetermineState”方法来启动区域观察.谢谢,解决方法苹果的documentationforCLLocationManager状态:Thelocationmanagercallsthismetho

  3. ios – 我可以只从一个蓝牙广播多个ibeacon信号吗?如何

    我想用ipad的蓝牙模拟多个ibeacon信号,是否可能解决方法您不能同时进行多个传输,但您可以通过使用计时器在两个或更多个发送器之间切换来模拟这种情况.当作为iBeacon进行传输时,iOS设备通常每秒发送10个广告包.但接收者只希望在正常操作中每秒至少接收一次数据包.尝试设置一个定时器在两个iBeacon发射器之间来回切换(关闭一个然后打开另一个).像这样:我测试了这个并且它可以工作–第二个i

  4. iBeaconswift

    随着这一技术的发展,苹果在2013年WWDC大会上,苹果推出iBeacon技术。该技术允许开发人员开发能够使用iBeacon硬件传感器的iOS应用程序,来为相应的应用程序提供更加精准的位置信息。2014年WWDC大会上,苹果表示,对iBeacon技术进行了改善,借助该技术,应用程序现在能够跟踪到用户所在的楼层的精确位置信息。iBeacon的工作方式是Transmitter-Receiver,即基站-接收机模式的。这里列举个iBeacon的使用场景:在房屋中介中使用。

  5. Swift based iBeacon App Development with CoreLocation on Apple iOS 7/8

    We'vehadanumberofcustomerswhowanttouseApple'snewprogramminglanguageSwifttodevelopiBeaconapplications,sowedecidedtodevelopatutorialtomakeiteasiertogetupandrunning.RightNow,Swift,Xcode6,andiOS8areallcov

  6. iBeacon 的第一篇基于Swift实现

    随着这一技术的发展,苹果在2013年WWDC大会上,苹果推出iBeacon技术。2014年WWDC大会上,苹果表示,对iBeacon技术进行了改善,借助该技术,应用程序现在能够跟踪到用户所在的楼层的精确位置信息。iBeacon的工作方式是Transmitter-Receiver,即基站-接收机模式的。这里列举个iBeacon的使用场景:在房屋中介中使用。甚至于还有一个老外用iBeacon做了一个实景的经营游戏,点击这里观看。

  7. ibeacon – 用于Beacon检测的Swift2.3代码

    我们正处于开发Swift2.2应用程序的高级阶段,因此决定在此期间迁移到2.3并稍后进行完整的Swift3迁移.但是我们无法在转换到Swift2.3后获得信标检测工作.方法“didRangeBeacons”不断返回一个空数组.相同的代码在Swift2.2中工作,因此我们知道我们拥有所有权限等.此外,如果我们在同一个ipad上打开“定位”应用程序,那么我们的应用程序也会开始在“didRangeBeacons”中返回数据.尝试了各种版本的应用程序,所有Swift2.3应用程序的行为方式都相同.无法弄清楚Loc

  8. 如何在IOS中使用IBeacon

    这篇文章主要介绍了如何在IOS中使用IBeacon,想了解IBeacon的同学,一定要看一下

  9. ios7 – 是否可以使用ibeacon API访问所有信标?

    我即将完成使用具有UUID的Estimote信标的应用程序在我的项目中硬编码,列出了使用ibeaconAPI的所有Estimote信标,但是当我试图使用设备UUID将我自己的设备作为信标发射器时,这与estimoteUUID不同,我无法找到它,因为我在代码中提到的UUID是Estimote的.所以我的问题是,有什么方法可以找到我可以用苹果的ibeaconAPI跟踪的所有信标?

  10. ios – 如何将数据发送到变成iBeacon的iphone?

    如何将数据发送到充当iBeacon的iPhone?我正在寻找以下过程:>搜索附近的iBeacons>连接到一些iBeacon>在设备之间交换数据有谁知道如何把不同的蓝牙功能放在一起这可能吗?

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部