我怎么知道我的应用程序在后台运行?

Posted

技术标签:

【中文标题】我怎么知道我的应用程序在后台运行?【英文标题】:How can I know my app is working in background? 【发布时间】:2017-05-08 03:16:35 【问题描述】:

我写了这个程序,当应用程序显示在屏幕上时它就可以工作

如果应用程序在后台,它会停止打印纬度,当我恢复应用程序时,它会重新开始打印。

我在 xcode 中启用了后台模式,还检查了Location updates,为什么我的应用仍然没有在后台运行?

如果应用程序正在运行,只是print函数在后台不起作用,我怎么知道应用程序正在运行?

class ViewController: UIViewController,
    CLLocationManagerDelegate 

    var locationManager: CLLocationManager = CLLocationManager()
    var startLocation: CLLocation!

    func locationManager(_ manager: CLLocationManager,
                         didUpdateLocations locations: [CLLocation])
    
        let latestLocation: CLLocation = locations[locations.count - 1]
        print(latestLocation.coordinate.latitude)    
    

    override func viewDidLoad() 
        locationManager.desiredAccuracy = kCLLocationAccuracyBest
        locationManager.delegate = self
        locationManager.requestWhenInUseAuthorization()
        locationManager.startUpdatingLocation()
        startLocation = nil

    

【问题讨论】:

您只请求了“使用时”权限,因此您的应用在后台时不会获取位置。为此,您需要请求“始终”权限 现在我使用requestAlwaysAuthorization(),它仍然没有在后台运行 您是否将所需的使用字符串添加到您的 info.plist 中?您是否因“总是”许可而被提升?当您的应用暂停时,此视图控制器是否处于活动状态? 【参考方案1】:

首先,您的问题:

locationManager.requestWhenInUseAuthorization()

这会要求您的位置管理器仅在您的应用处于前台时更新其位置。您必须将其更改为:

locationManager.requestAlwaysAuthorization()

如果仍然不起作用,请确保您的位置管理器通过在委托函数中添加打印语句来触发更新。

二、如何在后台打印东西:

我最喜欢的方式是在 UserDefaults 中记录内容,因为这些内容会在应用重新启动后持续存在。例如,我将我的打印语句设置为 log 键的值。重新启动后,我将从 log 键读取 UserDefaults 的内容。

【讨论】:

【参考方案2】:

如果您的应用在后台使用位置)。除了在Info.plist 中设置后台模式功能外,您还必须将allowsBackgroundLocationUpdates 设置为YES。否则位置更新只会在前台传递。

如果先调用CLLocationManagerstartUpdatingLocation方法,并在projectname-Info.plist文件中添加必填Background Modes -> 应用注册位置更新。

【讨论】:

如果我将allowsBackgroundLocationUpdates 设置为true,就可以了。但是without showing the blue status bar 是什么意思?你的意思是如果我设置allowsBackgroundLocationUpdates可以隐藏蓝色条吗?但现在蓝条出现了。

以上是关于我怎么知道我的应用程序在后台运行?的主要内容,如果未能解决你的问题,请参考以下文章

adb设置后台运行不结束

VS Code为啥打不开但是后台在运行

如何在基于servlet的Web应用程序中运行后台任务?

如何知道我的 macOS 应用程序是在后台还是前台?

如何让我的 android 应用程序在后台运行?

从后台任务或服务中确定当前前台应用程序