- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果我终止应用程序,我在尝试保持我的功能运行时卡住了。
是否可以在应用程序未运行时保持核心位置(地理围栏/地理定位)和核心蓝牙运行?如果可能如何解决我的问题?我已经检查了背景模式,并实现了核心定位方法。这是我的代码:
class AppDelegate: UIResponder, UIApplicationDelegate, CLLocationManagerDelegate {
var viewController = ViewController()
var window: UIWindow?
var locationManager = CLLocationManager()
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
locationManager.delegate = self
locationManager.distanceFilter = kCLDistanceFilterNone
locationManager.desiredAccuracy = kCLLocationAccuracyBest
locationManager.pausesLocationUpdatesAutomatically = false
if #available(iOS 9.0, *) {
locationManager.allowsBackgroundLocationUpdates = true
}
beaconRegion.notifyEntryStateOnDisplay = true
beaconRegion.notifyOnEntry = true
beaconRegion.notifyOnExit = true
locationManager.startMonitoring(for: beaconRegion)
locationManager.stopRangingBeacons(in: beaconRegion)
locationManager.startRangingBeacons(in: beaconRegion)
locationManager.startUpdatingLocation()
return true
}
func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) {
if (region.identifier == beaconRegionIdentifier) {
manager.requestState(for: region)
goBackground()
}
}
func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) {
print("you exited region")
}
func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for region: CLRegion) {
if (region.identifier == beaconRegionIdentifier) {
manager.stopUpdatingLocation()
switch state {
case .inside:
manager.startRangingBeacons(in: region as! CLBeaconRegion)
manager.startUpdatingLocation()
case .outside:
let delay = DispatchTime.now() + .seconds(3)
DispatchQueue.main.asyncAfter(deadline: delay) {
manager.requestState(for: region)
}
case .unknown:
let delay = DispatchTime.now() + .seconds(3)
DispatchQueue.main.asyncAfter(deadline: delay) {
manager.requestState(for: region)
}
}
}
}
func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion) {
let state = UIApplication.shared.applicationState
switch(state){
case.active,
.inactive,
.background:
let mainView = UserDefaults.standard.bool(forKey: "toMainView")
var isWakeUpRunning = UserDefaults.standard.bool(forKey: "isWakeUpRunning")
if isWakeUpRunning {
if mainView {
for aBeacon in beacons{
if aBeacon.rssi > WAKE_UP_THRESHOLD && aBeacon.rssi != 0{
UserDefaults.standard.set(false, forKey: "isWakeUpRunning")
self.viewController.startFunction()
manager.stopRangingBeacons(in: region)
}else if aBeacon.rssi != 0 && aBeacon.rssi < WAKE_UP_THRESHOLD {
manager.stopRangingBeacons(in: region)
manager.requestState(for: region)
}
}
}
}else{
manager.stopRangingBeacons(in: region)
manager.requestState(for: region)
}
}
}
func goBackground() {
let app = UIApplication.shared
var bgTask: UIBackgroundTaskIdentifier = 0
bgTask = app.beginBackgroundTask(expirationHandler: {
NSLog("Expired: %lu", bgTask)
app.endBackgroundTask(bgTask)
})
NSLog("Background: %lu", bgTask)
}
}
从我的代码来看,它可以在前台和后台运行。但是当我从任务切换器向上滑动应用程序时,它无法工作。而且我也无法从 xcode 中看到日志。有什么想法可以帮助我吗?
最佳答案
一旦您从任务切换器向上滑动应用程序,您的应用程序将被终止,但 CoreLocation 仍将在操作系统级别为您工作,寻找与您所在地区匹配的信标:
locationManager.startMonitoring(for: beaconRegion)
一旦该区域发生变化(didEnter 或 didExit),您的应用将重新启动到后台。此时将按顺序调用以下方法:
application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?)
locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion)
届时您的应用将继续在后台运行。因为您的应用启动后台任务,所以这将持续 180 秒,然后被挂起。
但是,您的应用不会在从屏幕滑出到下一次区域转换发生之间运行。这是您能做的最好的事情。
关于ios - 如何在应用程序未运行(终止/终止)时保持 Core Location 和 Core Bluetooth 运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45317641/
Bluetooth Low Energy 中计步的服务、特征值 (UUID) 是什么?蓝牙文档的相应页面未列出任何步骤。如何计算步数?步数设备是否使用运行速度和节奏服务?谢谢。 最佳答案 某些设备确实
我有 2 个 Raspberry Pi,运行 Raspbian,是最新的。每个 Pi 都有一个蓝牙 USB 加密狗。我可以使用 this. 让它们通过 RFCOMM 进行通信 现在,我想在蓝牙物理链路
在低功耗蓝牙中,一个主设备可以连接的最大从设备数量是多少?主设备可以连接的最大从设备数量是多少? Bluetooth Low Energy 有 40 个 channel ,但为什么它们只使用 3 个
我正在尝试关闭蓝牙服务,但 Bluecove 在连接关闭方法 ( https://code.google.com/p/bluecove/issues/detail?id=90 ) 上有错误,我正在尝试
我想开发像蓝牙 LE 外围设备这样的应用程序,它停止在与蓝牙 LE 中央设备连接时做广告,并限制与多个蓝牙 LE 中央设备连接的蓝牙 LE 外围设备。 一个蓝牙 LE 外围设备一次只能与一个蓝牙 LE
Eclipse 一直要我定义一个 startActivity 方法,但我不知道该在该方法中放置什么。我已经在我的 androidmanifest.xml 中启用了蓝牙。 我在下面提供了我的代码的摘录:
我想基于 BlueZ 构建一个 c 文件,但我的系统中似乎没有 bluetooth.h 文件。 fatal error: bluetooth/bluetooth.h: No such file or
我正在使用运行 jb 的 root 三星 galaxy nexus 手机,由于某种原因,我没有从蓝牙连接服务接收到任何广播 Intent 。您将在下面找到我的接收器 list 和广播接收器代码。任何提
嗨,在下面的代码中,已经打开了蓝牙电话,但它仍然要求我打开下面代码中的弹出窗口。。谁能帮帮我,我哪里做错了。。允许没有必要问已经蓝牙是
有没有人在调用 bluetoothDeive.createBond() 时遇到与以下错误消息相同的问题? android 4.4 api的方法? java.lang.SecurityException
我正在寻找有关 JSR-82 的帮助。我找了很久,甚至还找了大学的项目主管来帮忙,但到目前为止,我还是没有运气。 我的问题... 我有一个项目,我只需要扫描蓝牙设备 我还无法扫描我的蓝牙设备。我在 C
我正在基于著名的 BluetoothChat 示例开发具有蓝牙功能的应用程序。基本上,使用此应用程序,客户端可以向服务器发送一些数据包。 我已经使用两部 Xperia 智能手机(Xperia X8 和
我正在处理 Java 和 BlueCove 以找到蓝牙设备。 我创建了一个 Maven 项目并添加了 BlueCove 依赖项: net.sf.bluecove bluecove
首先,我上次尝试将 c 程序编译为 linux-arm 架构时遇到了问题,以便稍后在 android 应用程序中使用它。我成功地这样做了,稍后我会写一篇关于如何使用 NDK 独立工具链的文章。 现在我
作为我的类(class)项目之一,我想通过蓝牙耳机或任何此类蓝牙设备按下它们上的可用按钮来启动/触发我自己的 android 应用程序。我将按下蓝牙耳机上的任何特定按钮,我的应用程序应该能够检测到该按
我的项目是使用 Micro:bit 微处理器创建一个交互式程序我正在构建一个游戏,它使用钻机作为 Controller 读取旋转方向和速度作为控制输入 但是我的导师也说在游戏运行的同时给电路板供电会很
我对 Android 编程完全陌生,从技术上讲,这是我在 Android Studio 上工作的第一个大项目。我正在尝试创建一个 android 应用程序,它通过蓝牙连接到我的 Arduino 设备并
我了解蓝牙配置文件包含其他配置文件和协议(protocol)。我不明白蓝牙设备之间究竟是如何交互的。例如,如果您使用任何实现 A2DP 配置文件的附件并将其连接到 iPad,那么 iPad 会将所有音
我想检查设备上是否启用了蓝牙(以便应用程序可以在没有用户交互的情况下使用它)。有没有办法做到这一点?我也可以分别检查蓝牙和低功耗蓝牙吗? 最佳答案 我使用 Radio 完成了此操作类(class)。
我是开发带有蓝牙连接到外围设备的移动应用程序的新手。我搜索了GATT是用于蓝牙LE通信的相关配置文件,但是我们的客户建议我们使用UART服务。现在我很困惑 1.这两件事是如何关联的 2.我们是否必须选
我是一名优秀的程序员,十分优秀!