后臺運(yùn)行之定位服務(wù)

第一步

需要在info.plist中添加兩個權(quán)限NSLocationAlwaysAndWhenInUseUsageDescription 和 NSLocationWhenInUseUsageDescription。

第二步

在Background Models中勾選Location updates


513887BAF82D32D3B35A3784D2C54A89.jpg
第三步

這里我測試后臺持續(xù)時間是用APP角標(biāo)計數(shù)的,因為發(fā)現(xiàn)如果本地調(diào)試退到后臺和拔出線正常跑的時間結(jié)果不一樣,在UIBackgroundTaskIdentifier情況下,如果本地連線調(diào)試,也可以很久,但是拔出線設(shè)置角標(biāo)也就三分鐘。所以這里要用到applicationIconBadgeNumber,在iOS7中直接設(shè)置applicationIconBadgeNumber沒有問題,但是在iOS8之后設(shè)置applicationIconBadgeNumber,程序沒有反應(yīng),因為在iOS8之后想要設(shè)置applicationIconBadgeNumber,需要在didFinishLaunchingWithOptions進(jìn)行用戶授權(quán)。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{
    //注冊推送
    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    [center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert) completionHandler:^(BOOL granted, NSError * _Nullable error) {
        if (!error) {
            NSLog(@"request authorization succeeded!");
        }
    }];
    
    return YES;
}
第四步
s#import "ViewController.h"
#import <CoreLocation/CoreLocation.h>

@interface ViewController ()<CLLocationManagerDelegate>

@property (nonatomic ,strong) CLLocationManager *locationManager;
@property (nonatomic ,assign) NSInteger         number;

- (IBAction)buttonClick:(id)sender;

@end

@implementation ViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
}

/** 蘋果_用戶位置更新后,會調(diào)用此函數(shù) */
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations
{
    self.number++;
    [UIApplication sharedApplication].applicationIconBadgeNumber = self.number;
    NSLog(@"success");
}

/** 蘋果_定位失敗后,會調(diào)用此函數(shù) */
- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
{
    NSLog(@"error");
}

- (IBAction)buttonClick:(id)sender
{
    self.number = 0;
    [UIApplication sharedApplication].applicationIconBadgeNumber = self.number;
    
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.allowsBackgroundLocationUpdates = YES;
    self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    self.locationManager.delegate = self;
    [self.locationManager requestAlwaysAuthorization];
    [self.locationManager startUpdatingLocation];
}

總結(jié):

  • 比較費(fèi)電
  • 審核人員會問你你想干啥(可以打電話或郵件交流,說明一下為什么需要后臺持續(xù)獲取位置)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容