当我进入iBeacon系列时,我可以在Foreground中启动应用程序吗?

0 background foreground ios ibeacon

我正在使用iBeacons为iOS创建一个应用程序.我知道,如果我设置一个要监控的区域,框架可以在我进入/退出某个区域时调用我的应用程序,或者打开该区域内的屏幕.我也成功地在这个回调中创建了一个本地通知.我的问题是,是否有可能将应用程序置于前台,就像它是否由用户启动一样?

dav*_*ung 5

不,我不相信这是可能的.Apple的理念是用户可以控制应用程序的前景.将应用程序置于前台的唯一三种方法是:(1)点击其图标,(2)点击与应用程序关联的通知,或(3)通过自定义URL从其他应用程序启动应用程序.

我有一位长期坚持认为这是可能的同事,所以我今天亲自尝试看看.在我们的开源SavengerHunt应用程序中,我修改了AppDelegate的didDetermineState方法以添加下面的代码,尝试强制应用程序进入前台.

        NSLog(@"Attempting for force window %@ into foreground", self.window);
        [self.window makeKeyAndVisible];
        NSLog(@"Done with attempt");
Run Code Online (Sandbox Code Playgroud)

在后台检测到iBeacon时执行的代码,日志行按预期显示.但是,应用程序没有更改为前台.

       2014-03-06 11:35:43.655 scavengerhunt[277:60b] Sending a notification that a beacon is nearby
       2014-03-06 11:35:43.678 scavengerhunt[277:60b] Attempting for force window <UIWindow: 0x14e96730; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x14e95870>; layer = <UIWindowLayer: 0x14e961f0>> into foreground
       2014-03-06 11:35:43.686 scavengerhunt[277:60b] Done with attempt
Run Code Online (Sandbox Code Playgroud)

鉴于这不起作用,您最好的选择是向用户提供本地通知.如果他们点击它,你的应用程序将移动到前台.