Xamarin 后台持续定位与提示

IOS后台持续运行对于c#程序员不懂得ios后台机制的是存在一定困扰的。特别是ios9过后对后台和安全进行了更严格的限制

好了废话不多说

一 设置info.plist权限信息

参考:http://www.jianshu.com/p/e54751348abe

需要开启后台运行模式:勾选位置更新,音频播放

二 关键代码

2.1 设置

 coo.DistanceFilter = -1;//设置两点之间位置精度,即手机不动也会提示
 coo.DesiredAccuracy = CLLocation.AccuracyBest;
 coo.AllowsBackgroundLocationUpdates = true;//开启后台持续定位
 coo.PausesLocationUpdatesAutomatically = false;//禁用后台暂停位置更新
 coo.Delegate = this;
 coo.RequestAlwaysAuthorization();

 coo.StartUpdatingLocation();
 coo.StartUpdatingHeading();

2.2 前后台切换

        public override void DidEnterBackground(UIApplication uiApplication)
        {       //进入后台
            DependencyService.Get<ILocationManager>().EnterBackground();
        }

        public override void WillEnterForeground(UIApplication uiApplication)
        {       //进入前台
            DependencyService.Get<ILocationManager>().EnterForground();
        }

三 播放音频(系统提示音)

var sound = new SystemSound(1007);

await sound.PlaySystemSoundAsync();

四 实现结果

当位置发生更新时播放系统提示音,且伴有震动,这里暂时对ios消息推送不甚了解,下次将在位置更新播放提示音同时加入本地推送

这里是使用xamarin.ios 原生api实现,之前试过百度地图持续最新sdk弄了半天进入后台就不行了,也许是我知识不够,但是使用原生api也行那么也就不用那么麻烦了

五 完整代码

[assembly: Dependency(typeof(MyLocationManager))]

namespace Xamarin.Simples.iOS
{
    public class MyLocationManager : NSObject, ICLLocationManagerDelegate, ILocationManager
    {
        private CLLocationManager coo;
        private bool init = false;
        public MyLocationManager()
        {
            coo = new CLLocationManager();

        }

        #region ICLLocationManagerDelegate

        #region IDisposable implementation

        void IDisposable.Dispose()
        {
            throw new NotImplementedException();
        }

        #endregion

        #region INativeObject implementation

        IntPtr ObjCRuntime.INativeObject.Handle
        {
            get
            {
                throw new NotImplementedException();
            }
        }

        #endregion

        [Foundation.Export("locationManager:didUpdateLocations:")]
        public async void LocationsUpdated(CoreLocation.CLLocationManager manager, CoreLocation.CLLocation[] locations)
        {
            Console.WriteLine("定位成功");

            var sound = new SystemSound(1007);

            await sound.PlaySystemSoundAsync();

        }

        [Export("locationManager:didUpdateHeading:")]
        public void UpdatedHeading(CoreLocation.CLLocationManager manager, CoreLocation.CLHeading newHeading)
        {

        }

        [Foundation.Export("locationManager:didUpdateToLocation:fromLocation:")]
        public void UpdatedLocation(CoreLocation.CLLocationManager manager, CoreLocation.CLLocation newLocation, CoreLocation.CLLocation oldLocation)
        {

        }

        #endregion

        public void Init()
        {
            if (!init)
            {
                coo.DistanceFilter = -1;
                coo.DesiredAccuracy = CLLocation.AccuracyBest;
                coo.AllowsBackgroundLocationUpdates = true;
                coo.PausesLocationUpdatesAutomatically = false;
                coo.Delegate = this;
                coo.RequestAlwaysAuthorization();

                coo.StartUpdatingLocation();
                coo.StartUpdatingHeading();

                init = true;
            }

        }

        public void EnterBackground()
        {
            if (init)
                coo.StartMonitoringSignificantLocationChanges();
        }

        public void EnterForground()
        {
            if (init)
                coo.StopMonitoringSignificantLocationChanges();
        }

    }
}

六  案例下载

https://yunpan.cn/cqegpGW96nYx7 (提取码:4508)

时间: 2024-10-28 11:06:02

Xamarin 后台持续定位与提示的相关文章

iOS开发 - 百度地图后台持续定位

之前有做一个定位的项目,类似嘀嘀打车那样. 需要后台持续定位. 这里选择了百度地图,不过在后台持续定位方面, 之前只是简单的设置如下: 不过经测试发现, 这样设置完,在后台运行大概30分钟,又会被crash掉. 重新打开应用则自动恢复定位. 当然,这不是我们想要的效果,所以折腾了下,实现了后台持续定位. 总的来说,就是利用进入后台后我们可操控的10分钟,来完成一些事情. 为达到持续定位,每10分钟.自动重新开启定位.这样就解决问题了. 具体如下: AppDelegate.h @property

iOS 后台持续定位详解(支持ISO9.0以上)

iOS 后台持续定位详解(支持ISO9.0以上) #import <CoreLocation/CoreLocation.h>并实现CLLocationManagerDelegate 代理,.h文件完整代码如下: [objc] view plain copy #import <UIKit/UIKit.h> #import <CoreLocation/CoreLocation.h> @interface ViewController : UIViewController&l

微信小程序后台持续定位功能使用

微信小程序团队在7月30日更新了 基础库 2.8.0 其中新添加了小程序后台持续定位功能和联系定位的接口 从上到下分别是 1.wx.onLocationChange//监听位置实时变化 2.wx.stopLocationUpdate//关闭监听实时位置变化,前后台都停止消息接收 3.wx.startLocationUpdate//开启小程序进入前台时接收位置消息 4.wx.startLocationUpdataBackground//开启小程序进入前后台时均接收位置消息 详细信息可查看https

运动App后台持续定位生成轨迹

1. 连续定位采集点 1.定位LocationService,另起进程同时创建守卫进程Service, LocationHelperService,Service挂掉时守卫进程唤起LocationService. package com.yxc.barchart.map.location.service; import android.app.Service; import android.content.ComponentName; import android.content.Intent;

后台持续定位CLLocationManager详解

CLLocationManager 8.0方法 locationManager.requestWhenInUseAuthorization() locationManager.requestAlwaysAuthorization() 9.0方法 locationManager.allowsBackgroundLocationUpdates = true locationManager.pausesLocationUpdatesAutomatically = false 此方法不关闭20分钟后自动

Xamarin.Android之定位

一.前言 打开我们手中的应用,可以发现越来越多的应用使用了定位,从而使我们的生活更加方便,所以本章我们将学习如何在Xamarin中进行定位的开发. 二.准备工作 因为我们的虚拟机是运行在电脑本地的,自然就没法进行定位了,但是我们可以借助DDMS这个工具帮助我们去调试. 首先要确定你的Android SDK所在的目录,读者可以通过以下方式找到: 工具->选项 然后读者打开该文件夹下的tools文件夹,我们就可以看到里面有很多以bat结果的文件,这个时候我们打开名为ddms.bat的文件后,将会看到

关于如何在安卓的百度地图开发里面简单实现持续定位

这几天自己研究了关于地手机上面开发安卓地图的问题,发现百度官方示例demo讲解百度持续定位方面还是讲解的有些不清楚,本人研究了几次之后将其弄得更详细以便于让各位方便学习,有不足之处请在评论区指出,官方示例的网址是:http://lbsyun.baidu.com/index.php?title=android-locsdk/guide/v5-0 上面的网址已经将安卓简单配置百度地图环境讲解的很详细了,再次不做赘述了,此外,可能会有人发现 1 package com.example.andoridl

Jenkins启动守护进程后台持续运行

在使用jenkins的时候,我们可能有这样的需求,希望jenkins启动的进程在后台持续运行,不阻塞jenkins的构建.1.136版本之前的jenkins不满足这种需求,1.136之后的版本支持. 为什么jenkins的进程是阻塞的? jenkins主进程和它所启动的子进程通过stdin.stdout.stderr这三个管道相互联系.也因为这样,jenkins可以打印所有进程的日志.子进程可能打印海量的日志,然后结束,但是jenkins主进程要保证所有的子进程通道关闭后,才能认为本次build

程序自启动及后台持续运行的研究(voip和GPS方式)

1,voip方式    1)首先要修改应用的plist配置,添加下面的设置:        Application does not run in background: NO        Required background modes: VOIP    注:添加这些配置之后,程序重启解锁就会自动运行application:                                  didFinishLaunchingWithOptions方法.    2)主要测试代码:- (BO