Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我的iOS应用程序不更新背景中的位置

我的iOS应用程序不更新背景中的位置
EN

Stack Overflow用户
提问于 2017-01-04 01:37:24
回答 2查看 3K关注 0票数 3

我有一个用Swift开发的iOS应用程序。我的应用程序目前在Swift 2中,但我使用Xcode 8和Swift 3。该应用程序被配置为使用遗留的快速语言版本。

直到最近,应用程序才正常工作。

该应用程序要求始终使用该位置的正确权限,自动化设置为“始终”。

我更新了生产应用程序的签名标识,应用程序停止收到位置更新通知,但仍在开发模式下工作(从xcode启动)。

现在,我撤销并更新了生产和开发证书,而应用程序在后台不更新位置,而自动化设置为始终。

应用程序的安装是正确的,所以我想证书是可以的,但我不明白为什么后台没有更新位置。

我在一个iPhone 7上运行这个应用程序,里面有IOS 10.2和xcode自动管理签名。

以下是我的位置管理器配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class LocationManager : NSObject, ModuleManager, CLLocationManagerDelegate {

    /// The core location manager
    let coreLocationManager: CLLocationManager

    public var datas: JSONable? {
        get {
            return LocationDatas(locations: self.locations)
        }

        set {
            self.locations = newValue == nil ? [Location]() : newValue as? [Location]
        }
    }

    /// The list of locations to send
    private var locations: [Location]?

    /// The last location
    public var lastLocation: Location? {
        return self.locations?.last
    }

    public override init() {

        self.coreLocationManager = CLLocationManager()
        if #available(iOS 9.0, *) {
            self.coreLocationManager.allowsBackgroundLocationUpdates = true
        }
        // The accuracy of the location data.
        self.coreLocationManager.desiredAccuracy = kCLLocationAccuracyBest;
        // The minimum distance (measured in meters) a device must move horizontally before an update event is generated.
        self.coreLocationManager.distanceFilter = 500; // meters
        self.locations = [Location]()

        super.init()
        self.coreLocationManager.delegate = self
        self.locationManager(self.coreLocationManager, didChangeAuthorizationStatus: CLLocationManager.authorizationStatus())

    }

    // MARK: - CLLocationManager Delegate

    public func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
        NSLog("location update")
        guard locations.count > 0 else {
            NSLog("Module Location -- no location available")
            return
        }

        // Add all location waiting in the list to send
        self.locations?.appendContentsOf(locations.map { Location(cllocation: $0) })
        SDKManager.manager?.sendHeartbeat()
    }

    public func locationManager(manager: CLLocationManager, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
        switch CLLocationManager.authorizationStatus() {
            case .NotDetermined:
                if #available(iOS 8.0, *) {
                    self.coreLocationManager.requestAlwaysAuthorization()
                } else {
                    self.coreLocationManager.startUpdatingLocation()
                }

            case .Denied, .Restricted:
                NSLog("Module Location -- access denied to use the location")

            case .AuthorizedAlways:
                NSLog("AuthorizedAlways")
                self.coreLocationManager.startUpdatingLocation()
                //self.coreLocationManager.startMonitoringSignificantLocationChanges()

            default:
                break
        }
    }

    public func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
        NSLog("Module Location -- error : \(error)")
    }
}

在后台不调用locationManager函数。

这是我的info.plist:

这是电话授权:

小位置箭头总是在那里,但没有记录位置更新。

EN

回答 2

Stack Overflow用户

发布于 2017-01-04 02:48:17

我检查了您的代码,它似乎很好,如果您已经完成了这些必需的设置,请修改

  1. 在后台模式下启用位置更新
  2. 在您的NSLocationAlwaysUsageDescription中添加info.plist

如果你没有做第一点,你的应用程序将崩溃,但如果没有做第2点,你的代码将通过,但你永远不会得到更新。

更新:

您的LocationManager对象似乎是在ARC中发布的。可以尝试通过添加将LocationManager类更改为Singleton吗?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static let sharedInstance = LocationManager()

并在代码中访问LocationManager,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
LocationManager.sharedInstance
票数 0
EN

Stack Overflow用户

发布于 2020-07-14 08:23:20

您不需要只为后台中的位置更新而使用。(可用于其他维护工作,如数据库清理、上传、下载等)

初始化coreLocationManager,时,还可以设置以下属性

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// It will allow app running location updates in background state
coreLocationManager.allowsBackgroundLocationUpdates = true 

// It will not pause location automatically, you can set it true if you require it. 
coreLocationManager.pausesLocationUpdatesAutomatically = false 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41460503

复制
相关文章
根据用户输入的行数,打印出相应行数的直角三角形
代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>输出指定行数的* 形成直角三角形</title> </head> <body> <script> // 输出指定行数的* ,形成直角三角形 var row = prompt("请输入需要打印的行数"); for (var i = 1; i <= row; i++) { for (var j = 1; j <= i; j++) {
是阿超
2021/10/15
8530
JS根据列表排列对象数组
] const sortInfo = ['f','c','b'] nodeData_.sort((a, b) => {
小仙女闯运维
2020/09/23
4.5K0
根据rpt文件打印报表
不用一个个地导入rpt文件,再去写固定的代码,而是每次动态的根据指定的名称去加载报表和打印   if(Session["PrintXml"]!=null)    {     ReportDocument rd=new ReportDocument();     rd.Load (this.Server.MapPath("\\Flow\\FlowForm\\rpt")+"\\"+Session["PrintFormName"]+".rpt");     rd.SetDataSource(XmlPage.Get
用户1075292
2018/01/23
1.3K0
WEB打印-根据需求打印局部源码记录
这次的需求可能就比较简单了,就是实现web端的打印,但是是根据需求打印,而不是直接打印全部
何处锦绣不灰堆
2020/05/29
8500
WEB打印-根据需求打印局部源码记录
用户输入
大多数程序都在解决最终用户问题,为此通常需要从用户那里获取一些信息。在程序需要一个名字时,你需要提示用户输入该名字;程序需要一个名字时,你需要提示用户输入一系列名字。
狼啸风云
2019/01/18
9700
扫码打印新的实现方法(打印时输入)
打印时输入的是Label mx 条码软件的文字、条码、二维码共有属性,实现扫描一个条码,打印一个新标签,常用于重新贴码的包装箱或产品贴。下图为文字、条码、二维码的“打印时输入”属性设置:
用户6708611
2023/07/05
4680
扫码打印新的实现方法(打印时输入)
SAP 根据PO查找对应的打印FORM
正文部分 1、TCODE:NACE进入 找到 输出控制条件对应的应用程序名字,如下图: 2、选中应用程序后,点击上面菜单里的输出类型,如下图
matinal
2020/11/27
7620
Vue根据数据字段大小进行排列
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <script type="text/javascript" src="http://cdn.suol
明知山
2020/09/03
8370
打印不重复的字符串全排列(递归)
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 
砖业洋__
2023/05/06
3970
打印不重复的字符串全排列(递归)
Dynamic ReLU:根据输入动态确定的ReLU
这是我最近才看到的一篇论文,它提出了动态ReLU (Dynamic ReLU, DY-ReLU),可以将全局上下文编码为超函数,并相应地调整分段线性激活函数。与传统的ReLU相比,DY-ReLU的额外计算成本可以忽略不计,但表示能力明显增强,并且实现简单,所以可以非常简单的对我们现有的模型进行修改。
deephub
2023/08/30
1850
Dynamic ReLU:根据输入动态确定的ReLU
java 输出字符串的所有排列_Java程序打印字符串的所有排列
static void print_permutations(String my_str,String my_ans){
用户7886150
2021/04/29
1.1K0
Angular 2 用户输入
等号左边的 (click) 表示把该按钮的点击事件作为绑定目标 。 等号右边,引号中的文本是一个 模板语句
陈不成i
2021/07/26
1.7K0
Python之用户输入
大多数程序都旨在解决最终用户的问题,为此,需要从用户那里获取一些信息。函数input()让程序暂停运行,等待用户输入一些文本。
py3study
2020/01/06
1.2K0
python 接收用户的输入
None是一个特殊的常量。 None和False不同。 None不是0。 None不是空字符串。 None和任何其他的数据类型比较永远返回False。 None有自己的数据类型NoneType。 你可以将None复制给任何变量,但是你不能创建其他NoneType对象。
py3study
2020/01/09
2K0
python 接收用户的输入
输入数字n然后输出0到n的全排列
给定一个正整数n, 则输出0到n的所有排列 输入:2 输出:012 021 102 120 201 210 代码: private static Set<String> result = new HashSet<String>(); public static void allSort(int number) { if (number < 0) { return; } String str=""; for (int i = 0;i <= number; i
用户6055494
2019/10/21
1.1K0
python用户输入(三)
name = "Li QW" #定义变量 fname = name  #fname等于name变量产生的值 print("My name is " , name,fname) name = "study"
py3study
2020/01/13
1K0
android adb logcat 根据包名打印日志
android根据包名打印日志 Linux or Mac: adb logcat | grep -F "`adb shell ps | grep com.abc.package | cut -c10-15`" windows: adb logcat | findstr com.abc.package adb logcat -v time | find “XXX” >D:\myLog2.txt "XXX"可以用包名,或者关键字去代替。
tea9
2022/07/16
2.2K0
Shell - 根据用户名查询该用户的相关信息
小小工匠
2023/09/01
1750
Shell - 根据用户名查询该用户的相关信息
点击加载更多

相似问题

根据用户输入的数字重新排列文本输入字段

20

如何根据用户输入打印if语句?

30

根据用户输入打印回算

24

根据用户输入打印不同的句子

20

根据用户的输入,打印正确的事件

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文