后台运行定位,音频,网络电话
大家都知道我们的程序在后台运行的时间是10分钟,10分钟后便会停止。但是像实时定位,播放音频,以及网络电话这些功能我们需要在后台持续运行。那么我们就要进行相应的设置。下面具体的例子以定位为例
#import <UIKit/UIKit.h>#import <CoreLocation/CoreLocation.h>@interface BackgroundTrackerViewController : UIViewController<CLLocationManagerDelegate>@property(nonatomic, retain) CLLocationManager *locationManager;@property(nonatomic, retain)UIButton *startTrackingButton;@property(nonatomic, retain)UILabel*alertLabel;- (void)startTracking:(id)sender; #import "BackgroundTrackerViewController.h"
@interface BackgroundTrackerViewController ()@end@implementation BackgroundTrackerViewController@synthesize locationManager,startTrackingButton,alertLabel;//开始跟踪- (void)startTracking:(id)sender{ ; }-(void)start:(id)sender{// ; }- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil{ self = ; if (self) { // Custom initialization } return self;}- (void)viewDidLoad{ ; // Do any additional setup after loading the view from its nib. self.view.backgroundColor=; self.startTrackingButton=; startTrackingButton.frame=CGRectMake(0, 200, 100, 50); ; ; ; self.alertLabel=[initWithFrame:CGRectMake(0, 100, 320, 50)]; self.alertLabel.backgroundColor=; self.alertLabel.hidden=YES; self.alertLabel.text=@"无法找到位置"; ; locationManager = [ init]; ; //Only applies when in foreground otherwise it is very significant changes ;//要求的精确度}- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation { CLLocationCoordinate2D currentCoordinates = newLocation.coordinate; ; ; NSLog(@"Entered new Location with the coordinates Latitude: %f Longitude: %f", currentCoordinates.latitude, currentCoordinates.longitude);}- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error { NSLog(@"Unable to start location manager. Error:%@", ); ;}- (void)didReceiveMemoryWarning{ ; // Dispose of any resources that can be recreated.} - (void)applicationDidEnterBackground:(UIApplication *)application
{ // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later. // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits. if ([ respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4if ([ isMultitaskingSupported]) { //Check if device supports mulitaskingUIApplication *application = ; //Get the shared application instance __block UIBackgroundTaskIdentifier background_task; //Create a task object background_task = ; //Tell the system that we are done with the tasksbackground_task = UIBackgroundTaskInvalid; //Set the task to be invalid //System will be shutting down the app at any point in time now}]; // Background tasks require you to use asyncrous tasks dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{//Perform your tasks that your application requires NSLog(@"time remain:%f", application.backgroundTimeRemaining); ; //End the task so the system knows that you are done with what you need to performbackground_task = UIBackgroundTaskInvalid; //Invalidate the background_task});}} } 修改应用的Info.plist 文件,你需要在Info.plist文件中添加UIBackgroundModes字段,该字段的值是应用支持的所有后台模式,是一个数值类型。目前此数 组可以包含“audio”、“location”和“voip”这三个字符串常量.
页:
[1]