菜鸟教程小白 发表于 2022-12-13 12:04:34

ios - 基于标准位置的 iOS 应用程序在暂停 IOS 后未唤醒


                                            <p><p>我正在开发一个基于位置的应用程序,它应该总是获取用户位置。我使用标准位置服务。但问题是,即使我们移动到其他位置,应用程序在后台保持空闲一段时间后也不会获取坐标。根据苹果文档,当一个新位置到达时,应用程序应该会自动唤醒,但这里不会发生这种情况。我正在共享代码并用于获取我的 plist 的位置和屏幕截图。 </p>

<pre><code>class SALocation: NSObject,CLLocationManagerDelegate
{
    static let sharedInstance : SALocation = SALocation()

    var locationManager : CLLocationManager!
    var location : CLLocation!
    var address : String!
    var latitude : NSString?
    var longitude : NSString?
    var isAdderssLoaded : Bool = false
    var locdictionary : NSMutableDictionary = NSMutableDictionary()

    func startLocationManager()
    {
      if self.locationManager == nil
      {
            self.locationManager = CLLocationManager()

            if CLLocationManager.locationServicesEnabled(){
                print(&#34;location service enabled&#34;)
            }
            self.locationManager.delegate = self
            self.locationManager.requestWhenInUseAuthorization()
            self.locationManager.distanceFilter = kCLDistanceFilterNone
            self.locationManager.desiredAccuracy = kCLLocationAccuracyBest

            if ( Float (UIDevice.currentDevice().systemVersion) &gt;= 9) {
                if #available(iOS 9.0, *) {
                  self.locationManager.allowsBackgroundLocationUpdates = true
                } else {
                  // Fallback on earlier versions
                };

            }

            self.locationManager.startUpdatingLocation()
            //self.locationManager.stopMonitoringSignificantLocationChanges()
      }
      else
      {
            self.locationManager.startUpdatingLocation()
      }
    }

    // MARK: CLLocationManagerDelegate
    func locationManager(manager: CLLocationManager, didFailWithError error: NSError)
    {
      UIAlertView(title:&#34;Alert&#34;, message:error.description, delegate: nil, cancelButtonTitle:nil, otherButtonTitles:&#34;Ok&#34;).show()
    }
    func locationManager(manager: CLLocationManager, didUpdateLocations locations: )
    {
      if locations.count &gt; 0
      {
            self.location = locations
            /* storing date and location to plist

            */

            let datenow = NSDate()
            let dateformatternow = NSDateFormatter ()
            dateformatternow.dateFormat = &#34;yyyyMMdd HH:mm:ss&#34;
            let timenow:NSString = dateformatternow.stringFromDate(datenow)
            let documetsdirectorypath = NSSearchPathForDirectoriesInDomains(NSSearchPathDirectory.DocumentDirectory, NSSearchPathDomainMask.UserDomainMask, true).last
            latitude = NSString(format: &#34;%f&#34;,self.location.coordinate.latitude)
            longitude = NSString (format: &#34;%f&#34;,self.location.coordinate.longitude)
            let latlong : NSString = NSString(format:&#34;%@~%@&#34;,latitude!,longitude!)
            NSUserDefaults.standardUserDefaults().setObject(latlong, forKey: &#34;latlong&#34;)
            let aFilePath =NSString(format: &#34;%@/location.plist&#34;,documetsdirectorypath!)
            locdictionary.setObject(latlong, forKey: timenow as String)
            locdictionary.writeToFile(aFilePath as String, atomically: true)
            ///////////// ||storing date and location to plist code ends here||\\\\\\





         // self.getAddressFromLocation(locations )
//            if (NSUserDefaults.standardUserDefaults().objectForKey(SettingAppRefresh) != nil)
//            {
//                if (NSUserDefaults.standardUserDefaults().objectForKey(SettingAppRefresh) as! NSString).isEqualToString(FalseString)
//                {
//                   // self.locationManager.stopUpdatingLocation()
//                }
//            }
      }
    }

}
</code></pre>

<p>我在这里所做的只是获取位置并将其写入 plist 文件。这适用于前景,背景等。但是当我让应用程序闲置 20 分钟时,即使我在应用程序暂停时移动到其他位置,也不会获取位置</p>

<p> <a href="/image/vRfok.png" rel="noreferrer noopener nofollow"><img src="/image/vRfok.png" alt="enter image description here"/></a> </p>

<p>功能选项卡如下所示 <a href="/image/nEMA2.png" rel="noreferrer noopener nofollow"><img src="/image/nEMA2.png" alt="enter image description here"/></a> </p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>要在后台启动位置,您必须从以下路径启动后台服务</p>

<blockquote>
<p>Click on your name -&gt; Click on your app name (target) -&gt; goto capabilities -&gt; find the background mode -&gt; enable the location update mode</p>
</blockquote>

<p> <a href="/image/SLbgx.png" rel="noreferrer noopener nofollow"><img src="/image/SLbgx.png" alt="enter image description here"/></a> </p>

<p>我不确定你是否开始这样做,因为你没有放任何关于这个的截图。</p>

<p>还要检查您的用户是否在设置中启动了后台刷新。请参阅下面的链接。</p>

<p> <a href="https://stackoverflow.com/questions/20239829/background-app-refresh-checking-enabling-and-disabling-programatically-for-whol" rel="noreferrer noopener nofollow">Background App Refresh checking, enabling and disabling programatically for whole device and for each particular application in iOS 7</a> </p>

<p><strong>更新::</strong>
用于背景中的位置更新链接( objective-c )</p>

<p> <a href="http://www.creativeworkline.com/2014/12/core-location-manager-ios-8-fetching-location-background/" rel="noreferrer noopener nofollow">http://www.creativeworkline.com/2014/12/core-location-manager-ios-8-fetching-location-background/</a> </p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 基于标准位置的 iOS 应用程序在暂停 IOS 后未唤醒,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/33820328/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/33820328/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 基于标准位置的 iOS 应用程序在暂停 IOS 后未唤醒