Xamarin iOS系统:屏幕关闭时保持应用程序运行

zpf6vheq  于 2023-02-01  发布在  iOS
关注(0)|答案(1)|浏览(220)

我正面临着以下问题。我有一个应用程序,要求在“总是”模式下的位置,由于某种原因进入睡眠时,屏幕关闭。它还要求加速度计数据。所有这些都是在一个长期运行的任务。
我原以为“Location Always”会让应用保持接收位置数据,从而保持应用运行。
第二个问题是,在某些情况下,当屏幕关闭时,应用程序应该播放声音,通知用户解锁,因为他必须与应用程序交互。
我的信息列表包含以下内容:

<key>UIBackgroundModes</key>
<array>
    <string>bluetooth-central</string>
    <string>remote-notification</string>
    <string>processing</string>
    <string>location</string>
</array>

但是,AFAIK,它并没有帮助实现我想要的。
谢谢你的帮助。

cbeh67ev

cbeh67ev1#

下面是在后台模式下使用LocationService的示例。

public class LocationManager
    {
        protected CLLocationManager locMgr;
        public event EventHandler<LocationUpdatedEventArgs> LocationUpdated = delegate { };

        public LocationManager()
        {
            this.locMgr = new CLLocationManager
            {
                // This mode is resistant to applications being killed in the background 
                PausesLocationUpdatesAutomatically = false
            };

            if (UIDevice.CurrentDevice.CheckSystemVersion(8, 0))
            {
                locMgr.RequestAlwaysAuthorization();
            }

            if (UIDevice.CurrentDevice.CheckSystemVersion(9, 0))
            {
                locMgr.AllowsBackgroundLocationUpdates = true;
            }
        }

        public CLLocationManager LocMgr
        {
            get { return this.locMgr; }
        }

        public void StartLocationUpdates()
        {
            if (CLLocationManager.LocationServicesEnabled)
            {
                LocMgr.DesiredAccuracy = 1;
                LocMgr.LocationsUpdated += (object sender, CLLocationsUpdatedEventArgs e) =>
                {
                    LocationUpdated(this, new LocationUpdatedEventArgs(e.Locations[e.Locations.Length - 1]));
                };
                LocMgr.StartUpdatingLocation();
            }
        }
    }

当应用程序在后台模式下监视位置服务时,您可以尝试使用声音发送本地通知

// Trigger by position
    @IBAction func locationInterval(_ sender: Any) {

        let content = UNMutableNotificationContent()
        content.title = "xx"
        content.body = "xx"
        
        let coordinate = CLLocationCoordinate2D(latitude: 31.29065118, longitude: 118.3623587)
        let region = CLCircularRegion(center: coordinate, radius: 500, identifier: "center")
        region.notifyOnEntry = true 
        region.notifyOnExit = false 

        let trigger = UNLocationNotificationTrigger(region: region, repeats: true)
        let requestIdentifier = "com.abc.testUserNotifications"

        let request = UNNotificationRequest(identifier: requestIdentifier, content: content, trigger: trigger)
        UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
    }

希望有帮助。

相关问题