CoreBluetooth后台运行的实现

原创 2014年08月28日 16:55:19

上一篇中实现了和蓝牙设备的通讯功能,app在前台运行是是没有任何问题的。当然如果你想当你的app处于后台时仍然可以和蓝牙设备通讯时,那就得采用其他的方式来实现了!实现方式如下:

1;在plist文件中进行一下设置


2;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.backgroundColor = [UIColor whiteColor];

    [self SessionRemote];
    [self CTcallcenter];//电话监听
    [self.window makeKeyAndVisible];
    return YES;
}

3;在使用音乐播放器播放音乐,看电影,接听电话等情况下仍然可以通讯需要在后台协议中进行如下设置 否则只能运行5分钟将会停止

//后台运行事件
- (void)applicationDidEnterBackground:(UIApplication *)application{
    NSLog(@"后台运行事件");
    [[CBperipheral Singleton]starReading];//每隔30s读取一次蓝牙设备的常量值如:电量等
   

    //每隔30s播放一次音频

     readingAudio =[[NSTimer scheduledTimerWithTimeInterval:radingTime
                                                    target:self
                                                  selector:@selector(playVoice)
                                                  userInfo:nil
                                                   repeats:YES] retain];
}
//返回前台
- (void)applicationWillEnterForeground:(UIApplication *)application{
    [[CBperipheral Singleton]stopReading];//取消读取常量值
    if (readingAudio) {//取消播放音频
        [readingAudio invalidate];
    }
}




-(void)SessionRemote{
    
    // 必须正确处理background task,才能在后台发声
    self.bgTaskID = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [[UIApplication sharedApplication] endBackgroundTask:self.bgTaskID];
        self.bgTaskID = UIBackgroundTaskInvalid;
    }];
    
    NSError *sessionError = nil;
    [[AVAudioSession sharedInstance] setDelegate:nil];
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord
                                           error:&sessionError];
    [[AVAudioSession sharedInstance] setActive:YES error:nil];
    
    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
    AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
    
    UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
    [[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
}

-(void)CTcallcenter{ //电话监听
    CTCallCenter  *center =[[CTCallCenter alloc] init];
    center.callEventHandler=^(CTCall *call){
        if (CTCallStateIncoming == call.callState) {
            remindSet *remind=[[FM_Operating Singleton]select_remind];
            if (remind) {
                if ([remind.phone isEqualToString:@"YES"]) {//电话进来
                    NSLog(@"发送来电提醒指令");
                }
            }
        }else if(CTCallStateDisconnected == call.callState){//电话挂断
        }
    };
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

ios蓝牙开发学习笔记(四)ios蓝牙应用的后台处理

ios蓝牙应用的后台处理 对于ios应用,你必须要清楚它是在前台运行,还是在后台运行。因为资源有限,你要对这两种模式区别处理...
  • swibyn
  • swibyn
  • 2016年08月02日 17:59
  • 9976

如何从后台开启android蓝牙的可见性以及始终保持可见性

最近工作中遇到一个特殊的需求,要求代码能够从后台开机android手机蓝牙的可见性。而framework提供了一种打开可见性的操作,就是通过向用户弹出一个提示框,来询问是否允许开启可见性。而且限制了最...
  • godwanglong
  • godwanglong
  • 2013年12月01日 13:09
  • 3266

iOS 低功耗蓝牙 在后台长期运行的解决方案

最近一段在做低功耗蓝牙的项目,  有个需求是需要在后台长期运行蓝牙的连接 重连 数据传输等操作,但是苹果对后台运行的程序比较严格,网上现有的很多方案都不合适,后面在苹果文档上找到了答案,完美解决! 就...
  • wfawff
  • wfawff
  • 2015年09月14日 10:57
  • 3515

iOS开发- 蓝牙后台接收数据(BLE4.0)

最近在做一个蓝牙相关的项目, 需要在应用进入后台, 或者手机属于锁屏状态的情况下, 仍然保持蓝牙连接, 并且能正常接收数据。 本来以后会很麻烦, 但是学习了下..发现就2步而已。简单的不能再简单了。...
  • zhuzhihai1988
  • zhuzhihai1988
  • 2014年06月11日 17:48
  • 19137

iOS app 后台运行利用本地推送处理蓝牙设备通讯指令

1.在xxx-info.plist文件中, 新建一行  Required background modes , 加入下面两项。 App shares data using CoreBluetoot...
  • zwl492454828
  • zwl492454828
  • 2016年06月07日 15:22
  • 1413

ios蓝牙开发学习笔记(四)ios蓝牙应用的后台处理

ios蓝牙应用的后台处理 对于ios应用,你必须要清楚它是在前台运行,还是在后台运行。因为资源有限,你要对这两种模式区别处理...
  • swibyn
  • swibyn
  • 2016年08月02日 17:59
  • 9976

iOS开发- 蓝牙后台接收数据(BLE4.0)

最近在做一个蓝牙相关的项目, 需要在应用进入后台, 或者手机属于锁屏状态的情况下, 仍然保持蓝牙连接, 并且能正常接收数据。 本来以后会很麻烦, 但是学习了下..发现就2步而已。简单的不能再简单了。...
  • zhuzhihai1988
  • zhuzhihai1988
  • 2014年06月11日 17:48
  • 19137

如何从后台开启android蓝牙的可见性以及始终保持可见性

最近工作中遇到一个特殊的需求,要求代码能够从后台开机android手机蓝牙的可见性。而framework提供了一种打开可见性的操作,就是通过向用户弹出一个提示框,来询问是否允许开启可见性。而且限制了最...
  • godwanglong
  • godwanglong
  • 2013年12月01日 13:09
  • 3266

iOS 后台运行实现总结

原文:http://www.jianshu.com/p/d3e279de2e32 iOS 后台运行的规则 应用的运行状态分为以下五种: Not running:应用还没有启动,或者应...
  • u011270282
  • u011270282
  • 2017年03月29日 16:44
  • 968

iOS学习笔记50-IOS后台运行 之 后台播放音乐

iOS 4开始引入的multitask,我们可以实现像ipod程序那样在后台播放音频了。如果音频操作是用苹果官方的AVFoundation.framework实现,像用AvAudioPlayer,Av...
  • m18510011124
  • m18510011124
  • 2015年12月01日 16:43
  • 1511
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CoreBluetooth后台运行的实现
举报原因:
原因补充:

(最多只允许输入30个字)