ios手机蓝牙app开发教程开发 当app被挂起怎么接收数据

iOS开发- 蓝牙后台接收数据(BLE4.0) .
】 浏览:1次
1.在xxx-info.plist文件中, 新建一行 &Required background modes &, 加入下面两项。
App shares data using CoreBluetooth &和 &App communicates using CoreBluetooth
加入这个项后, 你会发现, 当应用进入后台后, 蓝牙还是保持连接的。
但是, 进入后台后, 虽然应用还挂着, 能够正常接收数据。但是, &来数据了, 如果需要我们实时响应, 那就要用到推送了。
也就是, 当数据来的时候, 弹出一个提示框, 提示用户来数据了。
2. 设置本地推送
这里的方法写在AppDelegate.m中。 &receiveData对应你接收到数据的响应函数。
-(void)receiveData:(NSData*)data&&
&&&&NSLog(@&收到数据了&);&&
&&&&UILocalNotification&*noti&=&[[UILocalNotification&alloc]&init];&&
&&&&if&(noti)&&
&&&&&&&&&&
&&&&&&&&noti.timeZone&=&[NSTimeZone&defaultTimeZone];&&
&&&&&&&&&&
&&&&&&&&noti.repeatInterval&=&NSWeekCalendarU&&
&&&&&&&&&&
&&&&&&&&noti.soundName&=&UILocalNotificationDefaultSoundN&&
&&&&&&&&&&
&&&&&&&&noti.alertBody&=&@&接收到数据了&;&&
&&&&&&&&noti.alertAction&=&@&打开&;&&
&&&&&&&&&&
&&&&&&&&noti.applicationIconBadgeNumber&=&1;&&
&&&&&&&&&&
&&&&&&&&NSDictionary&*infoDic&=&[NSDictionary&dictionaryWithObject:@&name&&forKey:@&key&];&&
&&&&&&&&noti.userInfo&=&infoD&&
&&&&&&&&&&
&&&&&&&&UIApplication&*app&=&[UIApplication&sharedApplication];&&
&&&&&&&&[app&scheduleLocalNotification:noti];&&
您看到此篇文章时的感受是:
【】【90" target=_blank>投稿】【job=collect&fid=90&id=742">收藏】
【job=recommend&fid=90&id=742" target=_blank>推荐】【job=report&fid=90&id=742" target=_blank>举报】【?fid=90&id=742" target=_blank>评论】iOS蓝牙开发(三):App作为外设被连接的实现
招聘信息:
在说了app作为central连接peripheral的情况,这一节介绍如何使用app发布一个peripheral,给其他的central连接。还是这张图,central模式用的都是左边的类,而peripheral模式用的是右边的类peripheral模式的流程1. 打开peripheralManager,设置peripheralManager的委托2. 创建characteristics,characteristics的description 创建service,把characteristics添加到service中,再把service添加到peripheralManager中3. 开启广播advertising4. 对central的操作进行响应& & - 4.1 读characteristics请求& & - 4.2 写characteristics请求& & - 4.4 订阅和取消订阅characteristics##准备环境Xcode开发证书和手机(蓝牙程序需要使用使用真机调试,使用模拟器也可以调试,但是方法很蛋疼,我会放在最后说),如果不行可以使用osx程序调试蓝牙外设##实现步骤1.打开peripheralManager,设置peripheralManager的委托设置当前ViewController实现CBPeripheralManagerDelegate委托@interface&BePeripheralViewController&:&UIViewController初始化peripheralManager/*
和CBCentralManager类似,蓝牙设备打开需要一定时间,打开成功后会进入委托方法
-&(void)peripheralManagerDidUpdateState:(CBPeripheralManager&*)
模拟器永远也不会得CBPeripheralManagerStatePoweredOn状态
peripheralManager&=&[[CBPeripheralManager&alloc]initWithDelegate:self&queue:nil];2.创建characteristics,characteristics的description ,创建service,把characteristics添加到service中,再把service添加到peripheralManager中。在委托方法 - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral中,当peripheral成功打开后,才可以配置service和characteristics。 这里创建的service和chara对象是CBMutableCharacteristic和CBMutableService。他们的区别就像NSArray和NSMutableArray区别类似。 我们先创建characteristics和description,description是characteristics的描述,描述分很多种, 这里不细说了,常用的就是CBUUIDCharacteristicUserDescriptionString。//peripheralManager状态改变
-&(void)peripheralManagerDidUpdateState:(CBPeripheralManager&*)peripheral{
&&&&switch&(peripheral.state)&{
&&&&&&&&&&&&//在这里判断蓝牙设别的状态&&当开启了则可调用&&setUp方法(自定义)
&&&&&&&&case&CBPeripheralManagerStatePoweredOn:
&&&&&&&&&&&&NSLog(@"powered&on");
&&&&&&&&&&&&[info&setText:[NSString&stringWithFormat:@"设备名%@已经打开,可以使用center进行连接",LocalNameKey]];
&&&&&&&&&&&&[self&setUp];
&&&&&&&&&&&&
&&&&&&&&case&CBPeripheralManagerStatePoweredOff:
&&&&&&&&&&&&NSLog(@"powered&off");
&&&&&&&&&&&&[info&setText:@"powered&off"];
&&&&&&&&&&&&
&&&&&&&&default:
&&&&&&&&&&&&
}//配置bluetooch的
&-(void)setUp{
&&&&&&&&//characteristics字段描述
&&&&&&&&CBUUID&*CBUUIDCharacteristicUserDescriptionStringUUID&=&[CBUUID&UUIDWithString:CBUUIDCharacteristicUserDescriptionString];
&&&&&&&&/*
&&&&&&&&&可以通知的Characteristic
&&&&&&&&&properties:CBCharacteristicPropertyNotify
&&&&&&&&&permissions&CBAttributePermissionsReadable
&&&&&&&&&*/
&&&&&&&&CBMutableCharacteristic&*notiyCharacteristic&=&[[CBMutableCharacteristic&alloc]initWithType:[CBUUID&UUIDWithString:notiyCharacteristicUUID]&properties:CBCharacteristicPropertyNotify&value:nil&permissions:CBAttributePermissionsReadable];
&&&&&&&&/*
&&&&&&&&&可读写的characteristics
&&&&&&&&&properties:CBCharacteristicPropertyWrite&|&CBCharacteristicPropertyRead
&&&&&&&&&permissions&CBAttributePermissionsReadable&|&CBAttributePermissionsWriteable
&&&&&&&&&*/
&&&&&&&&CBMutableCharacteristic&*readwriteCharacteristic&=&[[CBMutableCharacteristic&alloc]initWithType:[CBUUID&UUIDWithString:readwriteCharacteristicUUID]&properties:CBCharacteristicPropertyWrite&|&CBCharacteristicPropertyRead&value:nil&permissions:CBAttributePermissionsReadable&|&CBAttributePermissionsWriteable];
&&&&&&&&//设置description
&&&&&&&&CBMutableDescriptor&*readwriteCharacteristicDescription1&=&[[CBMutableDescriptor&alloc]initWithType:&CBUUIDCharacteristicUserDescriptionStringUUID&value:@"name"];
&&&&&&&&[readwriteCharacteristic&setDescriptors:@[readwriteCharacteristicDescription1]];
&&&&&&&&/*
&&&&&&&&&只读的Characteristic
&&&&&&&&&properties:CBCharacteristicPropertyRead
&&&&&&&&&permissions&CBAttributePermissionsReadable
&&&&&&&&&*/
&&&&&&&&CBMutableCharacteristic&*readCharacteristic&=&[[CBMutableCharacteristic&alloc]initWithType:[CBUUID&UUIDWithString:readCharacteristicUUID]&properties:CBCharacteristicPropertyRead&value:nil&permissions:CBAttributePermissionsReadable];
&&&&&&&&//service1初始化并加入两个characteristics
&&&&&&&&CBMutableService&*service1&=&[[CBMutableService&alloc]initWithType:[CBUUID&UUIDWithString:ServiceUUID1]&primary:YES];
&&&&&&&&[service1&setCharacteristics:@[notiyCharacteristic,readwriteCharacteristic]];
&&&&&&&&//service2初始化并加入一个characteristics
&&&&&&&&CBMutableService&*service2&=&[[CBMutableService&alloc]initWithType:[CBUUID&UUIDWithString:ServiceUUID2]&primary:YES];
&&&&&&&&[service2&setCharacteristics:@[readCharacteristic]];
&&&&&&&&//添加后就会调用代理的-&(void)peripheralManager:(CBPeripheralManager&*)peripheral&didAddService:(CBService&*)service&error:(NSError&*)error
&&&&&&&&[peripheralManager&addService:service1];
&&&&&&&&[peripheralManager&addService:service2];
&}3.开启广播advertising//perihpheral添加了service
-&(void)peripheralManager:(CBPeripheralManager&*)peripheral&didAddService:(CBService&*)service&error:(NSError&*)error{
&&&&if&(error&==&nil)&{
&&&&&&&&serviceNum++;
&&&&//因为我们添加了2个服务,所以想两次都添加完成后才去发送广播
&&&&if&(serviceNum==2)&{
&&&&&&&&//添加服务后可以在此向外界发出通告&调用完这个方法后会调用代理的
&&&&&&&&//(void)peripheralManagerDidStartAdvertising:(CBPeripheralManager&*)peripheral&error:(NSError&*)error
&&&&&&&&[peripheralManager&startAdvertising:@{
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&CBAdvertisementDataServiceUUIDsKey&:&@[[CBUUID&UUIDWithString:ServiceUUID1],[CBUUID&UUIDWithString:ServiceUUID2]],
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&CBAdvertisementDataLocalNameKey&:&LocalNameKey
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&}
&&&&&&&&&];
//peripheral开始发送advertising
-&(void)peripheralManagerDidStartAdvertising:(CBPeripheralManager&*)peripheral&error:(NSError&*)error{
&&&&NSLog(@"in&peripheralManagerDidStartAdvertisiong");
}4. 对central的操作进行响应- 4.1 读characteristics请求- 4.2 写characteristics请求- 4.3 订阅和取消订阅characteristics//订阅characteristics
-(void)peripheralManager:(CBPeripheralManager&*)peripheral&central:(CBCentral&*)central&didSubscribeToCharacteristic:(CBCharacteristic&*)characteristic{
&&&&NSLog(@"订阅了&%@的数据",characteristic.UUID);
&&&&//每秒执行一次给主设备发送一个当前时间的秒数
&&&&timer&=&[NSTimer&scheduledTimerWithTimeInterval:1&target:self&selector:@selector(sendData:)&userInfo:characteristic&&repeats:YES];
//取消订阅characteristics
-(void)peripheralManager:(CBPeripheralManager&*)peripheral&central:(CBCentral&*)central&didUnsubscribeFromCharacteristic:(CBCharacteristic&*)characteristic{
&&&&NSLog(@"取消订阅&%@的数据",characteristic.UUID);
&&&&//取消回应
&&&&[timer&invalidate];
//发送数据,发送当前时间的秒数
-(BOOL)sendData:(NSTimer&*)t&{
&&&&CBMutableCharacteristic&*characteristic&=&t.userI
&&&&NSDateFormatter&*dft&=&[[NSDateFormatter&alloc]init];
&&&&[dft&setDateFormat:@"ss"];
&&&&NSLog(@"%@",[dft&stringFromDate:[NSDate&date]]);
&&&&//执行回应Central通知数据
&&&&return&&[peripheralManager&updateValue:[[dft&stringFromDate:[NSDate&date]]&dataUsingEncoding:NSUTF8StringEncoding]&forCharacteristic:(CBMutableCharacteristic&*)characteristic&onSubscribedCentrals:nil];
//读characteristics请求
-&(void)peripheralManager:(CBPeripheralManager&*)peripheral&didReceiveReadRequest:(CBATTRequest&*)request{
&&&&NSLog(@"didReceiveReadRequest");
&&&&//判断是否有读数据的权限
&&&&if&(request.characteristic.properties&&&CBCharacteristicPropertyRead)&{
&&&&&&&&NSData&*data&=&request.characteristic.
&&&&&&&&[request&setValue:data];
&&&&&&&&//对请求作出成功响应
&&&&&&&&[peripheralManager&respondToRequest:request&withResult:CBATTErrorSuccess];
&&&&}else{
&&&&&&&&[peripheralManager&respondToRequest:request&withResult:CBATTErrorWriteNotPermitted];
//写characteristics请求
-&(void)peripheralManager:(CBPeripheralManager&*)peripheral&didReceiveWriteRequests:(NSArray&*)requests{
&&&&NSLog(@"didReceiveWriteRequests");
&&&&CBATTRequest&*request&=&requests[0];
&&&&//判断是否有写数据的权限
&&&&if&(request.characteristic.properties&&&CBCharacteristicPropertyWrite)&{
&&&&&&&&//需要转换成CBMutableCharacteristic对象才能进行写值
&&&&&&&&CBMutableCharacteristic&*c&=(CBMutableCharacteristic&*)request.
&&&&&&&&c.value&=&request.
&&&&&&&&[peripheralManager&respondToRequest:request&withResult:CBATTErrorSuccess];
&&&&}else{
&&&&&&&&[peripheralManager&respondToRequest:request&withResult:CBATTErrorWriteNotPermitted];
}代码下载:我博客中大部分示例代码都上传到了github,地址是:/coolnameismy/demo,本文代码存放目录是BleDemo
微信扫一扫
订阅每日移动开发及APP推广热点资讯公众号:CocoaChina
您还没有登录!请或
点击量5558点击量5498点击量5310点击量5111点击量4938点击量4602点击量4355点击量4152点击量4007
&2015 Chukong Technologies,Inc.
京公网安备89当前访客身份:游客 [
这个人很懒,啥也没写
目前还没有任何评论
今日访问:4
昨日访问:12
本周访问:22
本月访问:101
所有访问:268
iOS应用程序一般的五个状态(app的活动监测)
发表于6个月前( 15:00)&&
阅读(73)&|&评论()
0人收藏此文章,
//&即将失去活动状态的时候调用(失去焦点,&不可交互)
-&(void)applicationWillResignActive:(UIApplication&*)application&{
//&应用程序进入后台的时候调用
//&一般在该方法中保存应用程序的数据,&以及状态
-&(void)applicationDidEnterBackground:(UIApplication&*)application&{
//&应用程序即将进入前台的时候调用
//&一般在该方法中恢复应用程序的数据,以及状态
-&(void)applicationWillEnterForeground:(UIApplication&*)application&{
//&重新获取焦点(能够和用户交互)
-&(void)applicationDidBecomeActive:(UIApplication&*)application&{
//&应用程序即将被销毁的时候会调用该方法
//&注意:如果应用程序处于挂起状态的时候无法调用该方法
-&(void)applicationWillTerminate:(UIApplication&*)application&{
//&应用程序接收到内存警告的时候就会调用
//&一般在该方法中释放掉不需要的内存
-&(void)applicationDidReceiveMemoryWarning:(UIApplication&*)application
&&&&NSLog(@"MemoryWarning");
更多开发者职位上
1)">1)">1" ng-class="{current:{{currentPage==page}}}" ng-repeat="page in pages"><li class='page' ng-if="(endIndex<li class='page next' ng-if="(currentPage
相关文章阅读ios蓝牙开发可以实现一对多吗_百度知道
ios蓝牙开发可以实现一对多吗
我有更好的答案
程序员都我觉板啊首先音响接收芯片吧接收代码规范吧照写啊利用xcode写程序啊
其他类似问题
为您推荐:
ios的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!

我要回帖

更多关于 手机蓝牙app开发教程 的文章

 

随机推荐