继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

iOS后台持续定位实现方法

www说
关注TA
已关注
手记 302
粉丝 83
获赞 493

1.选中target-->Gapability,打开Background Modes模式,并勾选Location updates

https://img2.mukewang.com/5d5e80ec0001746207080318.png

设置

2.代码如下:

ViewController.h
<pre>#import <UIKit/UIKit.h>

import <CoreLocation/CoreLocation.h>

@interface ViewController : UIViewController<CLLocationManagerDelegate>

//定位管理对象
@property(nonatomic,strong)CLLocationManager *manager;

@end</pre>
ViewController.m
<pre>#import "ViewController.h"

@interface ViewController ()
{
CLGeocoder *_coder;
//存储上一次的位置
}
@end

@implementation ViewController

  • (void)viewDidLoad
    {
    [super viewDidLoad];
    self.view.backgroundColor=[UIColor whiteColor];
    //1.创建定位管理对象
    _manager=[[CLLocationManager alloc]init];
    _coder=[[CLGeocoder alloc]init];
    //2.设置属性 distanceFilter、desiredAccuracy
    _manager.distanceFilter=kCLDistanceFilterNone;//实时更新定位位置
    _manager.desiredAccuracy=kCLLocationAccuracyBest;//定位精确度

    if([_manager respondsToSelector:@selector(requestAlwaysAuthorization)])
    {
    [_manager requestAlwaysAuthorization];
    }
    //该模式是抵抗程序在后台被杀,申明不能够被暂停
    _manager.pausesLocationUpdatesAutomatically=NO;
    //3.设置代理
    _manager.delegate=self;
    //4.开始定位
    [_manager startUpdatingLocation];
    //5.获取朝向
    [_manager startUpdatingHeading];

}

pragma mark-CLLocationManager代理方法

//定位失败时调用的方法
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
NSLog(@"%@",error);
}
//定位成功调用的的方法
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
if(locations.count>0)
{
//        获取位置信息
CLLocation *loc=[locations lastObject];
//        获取经纬度的结构体
CLLocationCoordinate2D coor=loc.coordinate;

    CLLocation *location=[[CLLocation alloc]initWithLatitude:coor.latitude longitude:coor.longitude];
    
    [_coder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error) {        CLPlacemark *pmark=[placemarks firstObject];        NSLog(@"%@",pmark.addressDictionary);        NSString *city=pmark.addressDictionary[@"City"];        if([city hasSuffix:@"市辖区"])
            city=[city substringToIndex:city.length-3];        if([city hasSuffix:@"市"])
            city=[city substringToIndex:city.length-1];        NSLog(@"%@",city);
    }];
}

}
@end</pre>
Appdelegate.m
<pre>#import "AppDelegate.h"

import <CoreLocation/CoreLocation.h>

import "ViewController.h"

@interface AppDelegate ()

@end

@implementation AppDelegate

  • (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window.rootViewController=[ViewController new];
    return YES;
    }

  • (void)applicationDidEnterBackground:(UIApplication )application {
    if([CLLocationManager significantLocationChangeMonitoringAvailable])
    {
    ViewController
    vc=(ViewController *)self.window.rootViewController;
    [vc.manager stopUpdatingLocation];
    [vc.manager startMonitoringSignificantLocationChanges];
    }
    else
    {
    NSLog(@"significant Location Change not Available");
    }
    }

  • (void)applicationDidBecomeActive:(UIApplication )application {
    if([CLLocationManager significantLocationChangeMonitoringAvailable])
    {
    ViewController
    vc=(ViewController *)self.window.rootViewController;
    [vc.manager stopMonitoringSignificantLocationChanges];
    [vc.manager startUpdatingLocation];
    }
    else
    {
    NSLog(@"significant Location Change not Available");
    }
    }

@end</pre>



作者:CGPointZero
链接:https://www.jianshu.com/p/16f3eef4d4ff


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP