`
吃饱了就饿
  • 浏览: 67153 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

后台运行定位,音频,网络电话

    博客分类:
  • IOS
阅读更多

大家都知道我们的程序在后台运行的时间是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
{
    [locationManager startUpdatingLocation]; 
}


-(void)start:(id)sender
{
//    [locationManager startUpdatingLocation]; 
}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    
    self.view.backgroundColor=[UIColor grayColor];
    
    
    self.startTrackingButton=[UIButton buttonWithType:UIButtonTypeRoundedRect];
    startTrackingButton.frame=CGRectMake(0, 200, 100, 50);
    [startTrackingButton addTarget:self action:@selector(startTracking:) forControlEvents:UIControlEventTouchUpInside];
    [startTrackingButton setTitle:@"startTracking" forState:UIControlStateNormal];
    [self.view addSubview:startTrackingButton];
    
    
    self.alertLabel=[[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 50)];
    self.alertLabel.backgroundColor=[UIColor orangeColor];
    self.alertLabel.hidden=YES;
    self.alertLabel.text=@"无法找到位置";
    [self.view addSubview:alertLabel];
    
    
    locationManager = [[CLLocationManager alloc] init];
    [locationManager setDelegate:self];
    //Only applies when in foreground otherwise it is very significant changes
    [locationManager setDesiredAccuracy:kCLLocationAccuracyBest];//要求的精确度
}


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation {
    CLLocationCoordinate2D currentCoordinates = newLocation.coordinate;
    [alertLabel setText:@"Location Has been found"];
    [alertLabel setHidden:NO];
    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:%@", [error description]);
    [alertLabel setHidden:NO];
}


- (void)didReceiveMemoryWarning
{
    [super 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 ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)])
    { //Check if our iOS version supports multitasking I.E iOS 4
		if ([[UIDevice currentDevice] isMultitaskingSupported])
        { //Check if device supports mulitasking
			UIApplication *application = [UIApplication sharedApplication]; //Get the shared application instance
            
			__block UIBackgroundTaskIdentifier background_task; //Create a task object
            
			background_task = [application beginBackgroundTaskWithExpirationHandler: ^{
                /*
                 当应用程序后台停留的时间为0时,会执行下面的操作(应用程序后台停留的时间为600s,可以通过backgroundTimeRemaining查看)
                 */
				[application endBackgroundTask: background_task]; //Tell the system that we are done with the tasks
				background_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);                
				[application endBackgroundTask: background_task]; //End the task so the system knows that you are done with what you need to perform
				background_task = UIBackgroundTaskInvalid; //Invalidate the background_task
			});
		}
	}
    
    
}

    修改应用的Info.plist 文件,你需要在Info.plist文件中添加UIBackgroundModes字段,该字段的值是应用支持的所有后台模式,是一个数值类型。目前此数 组可以包含“audio”、“location”和“voip”这三个字符串常量.

3
5
分享到:
评论

相关推荐

    太阳通话录音

    本软件需要的权限包括:打开网络接口、读取用户的联系人数据、监督、限定或终止呼出的电话、访问网络上的信息、访问范围(如WIFI)性的定位、记录音频信息、读取电话的状态、访问震动器、写用户的外部存储器;...

    生活分类信息发布网站的优秀网站管理系统正式版

    后台可设置信息发布是否需在通过审核、信息发布间隔时间、同一会员允许当天发布信息数量、电话过滤、非法字过滤、会员注册邮箱激活,多重过滤保障了信息的真实性、实用性。上海分类信息网站,地方分类信息网站,天津...

    网软志成分类信息网站系统.net官方商业版

    后台可设置信息发布是否需在通过审核、信息发布间隔时间、同一会员允许当天发布信息数量、电话过滤、非法字过滤、会员注册邮箱激活,多重过滤保障了信息的真实性、实用性。上海分类信息网站,地方分类信息网站,天津...

    分类信息系统正式版下载

    后台可设置信息发布是否需在通过审核、信息发布间隔时间、同一会员允许当天发布信息数量、电话过滤、非法字过滤、会员注册邮箱激活,多重过滤保障了信息的真实性、实用性。上海分类信息网站,地方分类信息网站,天津...

    vc++ 开发实例源码包

    视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 如题。 MFC换肤完全贴图实现 如题。 Smile简体版 很简单,只能播放mp3格式的音乐。 ...

    vc++ 应用源码包_3

    视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山...

    vc++ 应用源码包_1

    视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山...

    vc++ 应用源码包_2

    视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山...

    vc++ 应用源码包_6

    视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山...

    vc++ 应用源码包_5

    视频音频解码部分。 MFC_MultiSender_OVER 文件传送,多文件(超大文件)传送功能的实现,含文档。 MFC+DLL的编写和调用示例 MFC换肤完全贴图实现 Smile简体版 Linux内核完全注释附 MFC+消息循环贴图---金山...

    新版Android开发教程.rar

    Handset Handset Handset Handset Manufacturers Manufacturers Manufacturers Manufacturers 电话制造商 ASUSTeK Computer Inc. 华硕 Garmin International, Inc. HTC Corporation ( 多普达的母公司 ) 宏达电子 ...

    工程硕士学位论文 基于Android+HTML5的移动Web项目高效开发探究

    Webview WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页 Activity Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务,是一个负责与...

Global site tag (gtag.js) - Google Analytics