iOS后台模式教程 (一)

发布时间:2019-08-06 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了iOS后台模式教程 (一)脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

Background Modes Tutorial: Getting Started

iOS后台模式教程 (一

原文

使用场景

在iOS7之前的系统中,当应用被挂起,拥有连续的10分钟时间来处理之前的任务,然后才会被系统终止。

所以,后台模式有一些特殊的使用场景。例如,更新位置,播放视频音频,和更新服务器请求。

开始

第一步设置工程中的CapabilITies标签栏,打开Background Modes服务。

出现的Modes选项有

  • Audio,airplay and Picture in Picture 视频音频播放

  • Location updates 位置更新

  • Voice over IP IP

  • Newsstand downloads 杂志下载

  • External accessory communication 外部附件通信,包括App Watch

  • Uses Bluetooth LE accessories 蓝牙LE配件

  • Acts as a Bluetooth LE accessory 作为蓝牙LE配件

  • Background fetch 后台抓取服务

  • Remote notifications 远程通知

这里介绍几个模式的用法。

播放音频

下面这段代码加入viewDidLoad中,程序开始时会按顺序播放两个mP3文件。在勾选Audio,airplay and Picture in Picture后,挂起程序时,音乐还是会继续播放 。

引用

#import <AVFoundation/AVFoundation.h>

参数

@property (nonatomic, strong) AVQueuePlayer *player;

viewDidLoad

 NSError *sessionError = nil;
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
    NSArray *queue = @[
                       [AVPlayerItem playerItemWithURL:[[NSBundle mainBundle] URLForResource:@"music" withExtension:@"mp3"]],
                        [AVPlayerItem playerItemWithURL:[[NSBundle mainBundle] URLForResource:@"pop" withExtension:@"mp3"]]];
    
self.player = [[AVQueuePlayer alloc] initWithItems:queue];
self.player.actionAtItemEnd = AVPlayerActionAtItemEndAdvance;
    
[self.player play];

位置服务

参数

@property (nonatomic, strong) CLLocationManager *locationManager;
@property (nonatomic, strong) NSMutableArray *locations;

初始化LocationManager

self.locations = [[NSMutableArray alloc] init];
self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.delegate = self;

启动位置更新服务

[self.locationManager startUpdatingLocation];

记录新位置

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation
{
    // Add another annotation to the map. 
    if (UIApplication.sharedApplication.applicationState == UIApplicationStateActive)
    {
           //前台运行
    else
    {
            //后台运行
        NSLog(@"App is backgrounded. New location is %@", newLocation);
    }
}

代码解析

根据 UIApplication.sharedApplication.applicationState == UIApplicationStateActive 可以判断回调过程中,程序是否挂起。记住要勾选Location updates ,当你在制作一个跑步或骑车软件时,需要用到这项功能。

一般性有限长度任务

这个泛的功能包括上传或者下载任务等。

@PRoperty (nonatomic) UIBackgroundTaskIdentifier backgroundTask;
self.backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
//        NSLOG(@"Background handler called. Not running background tasks anymore.");
        [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
        self.backgroundTask = UIBackgroundTaskInvalid;
    }];

您也可以在任务完成的时候,主动调用 [[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask]; 终止任务。
程序会在后台运行,但并不是无限时间。

脚本宝典总结

以上是脚本宝典为你收集整理的iOS后台模式教程 (一)全部内容,希望文章能够帮你解决iOS后台模式教程 (一)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。