蓝牙项目实现
- 博客分类:
- 技术杂绘
蓝牙项目实现
2012年01月17日
蓝牙联机总结
连接的相关数据传送,需要从两个(或两个以上的)角度来进行设计和思考服务端和客户端(或者称为接收数据端和发送端来思考更合适,虽然两端都包含数据接收和发送两种思想,但设计的时候分开想好了再来写容易些),不管是蓝牙联还是通过网络服务器实现多人联,程序的构架思想是一样的。
(Apple api)
GKPeerPickerController 类(说明)
继承自 NSObject 类(在Frameworks中添加GameKit)
在3.0b以后版本中有效
在GKPeerPickerController.h中定义
参考指南:GameKit 编程指南
参考代码例子:GKTank
概要:
GKPeerPickerController类给用户提供一个标准接口,该接口允许用户的iPhone发现并连接上另外一个iPhone。结果是配置两个连接设备的GKSession object。使用GKPeerPickerController object后,你的程序生成一个控制器,增加一个delegate,配置允许连接的类型,然后显示picker。当用户选择连接一个picker的时候,代理会自动调用。
在iPhone os 3.0中,peer picker能够配置选择类型,在蓝牙和网络连接之间选择。
注意:虽然用户能够在peer picker里选择网络连接,GKPeerPickerController不会提供用户接口来设置他们。如果你的app设置peer picker允许网络连接,你的app必须(dismiss)去掉peer picker的点连接功能,而且这个时候它配置成网络连接。
if(Type=GKPeerPickerConnectiionTypeNearby)采用此语句会直接选择蓝牙模式,
if(Type=GKPeerPickerConnectionTypeOnline)采用此语句iphone会调用wifi功能
如果使用online类型则可以用手机和电脑进行联机程序测试!
picker初始化后,可以设定连接类型
picker.connectionTypesMask =GKPeerPickerConnectionTypeNearby|
GKPeerPickerConnectionTypeOnline;
[picker show];
相关任务
设置和获得代理
delegate属性
peer picker controller的代理
GKPeerPickerController类
显示picker对话框
-show(给用户显示picker对话框)
-dismiss(隐藏peer picker对话框)
visible属性(一个bool值,表明是否显示有visible对话框)
设置连接选项
一个mask决定当前连接类型,这个mask显示给用户
属性
connectionTypesMask
一个mask显示当前连接的对话框,用户能看到
@property(nonatomis,assign) GKPeerPickerConnectType connectionTypesMask
注意: 你的app允许在显示peer picker之前设置连接。如果你允许超过一个以上的连接类型,peer picker提供用户选择一个连接。默认连接是GKPeerPickerConnectionTypeNearby
在3.0中,GKPeerPickerConnectionTypeNearby是允许连接的类型中的一个。
在GKPeerPickerController.h文件中定义
delegate
@property(nonatomic,assign) iddelegate
该delegate必须适合GKPeerPickerControllerDelegate格式协议
visible
是一个boolean值(只读属性)
@property(readonly, getter=isVisible) BOOL visible
在GKPeerPickerController.h文件中定义
实例方法
dismiss
隐藏peer picker 对话框
-(void)dismiss
Declared In
GKPeerPickerController.h
show给用户显示picker对话框
官方相关代码
GKTank
constants
GKPeerPickerConnectionType
enum{
GKPeerPickerConnectionTypeOnline = 1 :error:
-denyConnectionFrompeer:
连接点的数据传送相关
-setDataReceiveHandler:withContext:
-sendData:toPeers:withDataMode:error:
-sendDataToAllPeers:withDataMode:error:
disconnectTimeout
关于session的信息
displayName
peerID
sessionID
sessionMode
peerID只读属性
@property(readonly)NSString *peerID
sessionID
@property(readonly)NSString *sessionID
sessionMode
@property(readonly)GKSessionMode sessionMode acceptConnectionFromPeer:error: -(BOOL)acceptConnectionFromPeer:(NSString*)peerID error:(NSError*)error
参数peerID
error
返回Yes,or NO
cancelConnectToPeer:
-(void)cancelConnectToPeer:(NSString*)peerID
initWithSessionID:displayName:sessionMode:
Initializesandreturnsanewlyallocatedsession.
- (id)initWithSessionID:(NSString *)sessionIDdisplayName:(NSString *)name
sessionMode:(GKSessionMode)mode
peersWithConnectionState:
Returnsalistofpeersinthespecifiedconnectionstate.
- (NSArray *)peersWithConnectionState:(GKPeerConnectionState) state
sendData:toPeers:withDataMode:error:
Transmitsacollectionofbytestoalistofconnectedpeers .
- (BOOL)sendData:(NSData *)datatoPeers:(NSArray *)peers
withDataMode:(GKSendDataMode)modeerror:(NSError **)error
参数:
data
发送的字节
peers
An array of NSString objects identifying the peers that should receive the data.
一个NSString数组确认应该接受数据的点
mode
用来发送数据的方法
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:
(GKSession *)session context:(void *)context;
typedef enum {
GKSendDataReliable,
GKSendDataUnreliable,
} GKSendDataMode;GKSessionClassReference
SessionModes
Modesthatdeterminehowasessioninteractswithotherpee rs.
typedef enum {
GKSessionModeServer,
GKSessionModeClient,
GKSessionModePeer,
} GKSessionMode;
ConnectionStates
typedef enum {
GKPeerStateAvailable,
GKPeerStateUnavailable,
GKPeerStateConnected,
GKPeerStateDisconnected,
GKPeerStateConnecting } GKPeerConnectionState; GKSessionClassReference - (void)peerPickerController:(GKPeerPickerController *)picker didSelectConnectionType:(GKPeerPickerConnectionTyp e)type { if(type == GKPeerPickerConnectionTypeOnline) { [picker dismiss]; [picker autorelease]; // Display your own user interface here. } 蓝牙联机涉及到的8个方法:
1,show picker
// show the Peer Picker
-(void)startPicker
2,//user did cancel
- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker
3,//Provide session id
- (GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type {
GKSession *session = [[GKSession alloc] initWithSessionID:kTankSessionID displayName:nilsessionMode:GKSessionModePeer];
return [session autorelease]; // peer picker retains a reference, so autorelease ours so we don't leak.
}
4,// dismiss the picker
- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session {
5,// invalidate session
- (void)invalidateSession:(GKSession *)session {
6,//receive data
- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void*)context {
}
7,//send packet
- (void)sendNetworkPacket:(GKSession *)session packetID:(int)packetID withData:(void *)data ofLength:(int)length reliable:(BOOL)howtosend {
8,// we've gotten a state change in the session
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state {
发表评论
-
Log4j使用总结(全面)二
2012-01-20 11:12 785Log4j使用总结(全面)二 17小时前 四、Log4j ... -
单元过关----捷达学校中级《财务管理》测试题(3)
2012-01-20 11:12 2849单元过关----捷达学校中 ... -
功能函数及明文发包综合分析
2012-01-20 11:12 957功能函数及明文发包综合分析 2011年12月25日 五林 ... -
C# Winform 去掉按钮按下时周围黑线框
2012-01-20 11:12 2120C# Winform 去掉按钮按下时周围黑线框 2011年0 ... -
最萌吸血鬼猎人,螺旋猫COS『BLOOD C』更衣小夜
2012-01-20 11:12 1173最萌吸血鬼猎人,螺旋猫COS『BLOOD C』更衣小夜 20 ... -
vc++网络安全编程范例(17)-open ssl 实现文件加密与解密
2012-01-19 16:04 1012vc++网络安全编程范例(17)-open ssl 实现文件加 ... -
[转载]问题9、如何用SPSS作方差分析比较?(转)
2012-01-19 16:04 1743[转载]问题9、如何用SPSS作方差分析比较?(转) 201 ... -
KEIL编译错误信息表(转载)
2012-01-19 16:04 1959KEIL编译错误信息表(转载) 2011年09月28日 ... -
【转】PPOE常见错误
2012-01-19 16:03 663【转】PPOE常见错误 2011年12月14日 宽带错误 ... -
iframe跨域请求 注销
2012-01-17 05:53 1040iframe跨域请求 注销 2011年10月10日 a域 ... -
如何解决js跨域问题
2012-01-17 05:53 624如何解决js跨域问题 201 ... -
做个第三眼美女
2012-01-17 05:53 511做个第三眼美女 2011年0 ... -
马英九:这是追求清廉和平繁荣的台湾路线胜利
2012-01-17 05:53 506马英九:这是追求清廉和平繁荣的台湾路线胜利 2012年01月 ... -
校内网XSS WORM分析
2012-01-17 05:53 641校内网XSS WORM分析 2011 ... -
面空文日志崇翔忧滏袖眼垤
2012-01-16 04:42 618面空文日志崇翔忧滏袖眼垤 2012年01月09日 ... -
文言文的词类活用
2012-01-16 04:42 759文言文的词类活用 2012年01月12日 文言文 ... -
南方古代建筑的风格
2012-01-16 04:42 610南方古代建筑的风格 20 ... -
登徒子好色赋所表达的意思
2012-01-16 04:42 662登徒子好色赋所表达的 ...
相关推荐
毕设项目基于STM32与HC05蓝牙模块实现的蓝牙键盘项目源码+项目说明.zip 1、该资源内项目代码都是经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信...
blidino, 通过蓝牙LE项目实现 Arduino USB MIDI到 MIDI blidino通过蓝牙项目实现 Arduino MIDI MIDI 。 repo 基于苹果公司最近发布的MIDI协议,将USB类兼容MIDI设备的草图和指令传递给 ios/cer设备。完全模板化,...
辅助团队蓝牙室内定位项目实现的计步器
从晚上下载的例子,发现不能自动获取设备、服务和特征值,这就导致了程序通用性大大降低,在通过自己的摸索后,将这部分功能调试通过,现在已经是一个通用的webapp调用ble的程序了,功能包括搜索、连接蓝牙,选取...
本项目源码可以实现两个蓝牙间的单方面通讯,可能是因为某些原因蓝牙客户端收不到服务器的信息。项目源码注释比较清晰,核心代码也已经封装成类了,看完本套源码应该可以很快上手蓝牙相关功能。Android对于蓝牙开发...
qt编写的低功耗蓝牙demo,可实现蓝牙检测连接与数据收发
将iOS蓝牙CoreBluetooth进行一次简易的封装,实现只要改变蓝牙设备UUID,就能完成蓝牙外设读取等功能.
该工程是项目的一部分,同时实现支持了蓝牙4.0和蓝牙2.0 有需要的可以参考 eclipse 工程.zip,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
android项目蓝牙连接简单源码 实现了简单的获取蓝牙设备名称等进行点击
本项目源码可以实现两个蓝牙间的单方面通讯,可能是因为某些原因蓝牙客户端收不到服务器的信息。项目源码注释比较清晰,核心代码也已经封装成类了,看完本套源码应该可以很快上手蓝牙相关功能。Android对于蓝牙开发...
uni-app 项目调用手机原生事件,获取蓝牙连接,打印信息
系统通过arduino实现的功能有:实现电器开关...本项目中的电机通过两个引脚的高低电压交换来实现反向旋转,从而可以控制窗帘的开和关。arduinomega 2560上的热感应器通过人体热量来判断是否有人进门。从而控制其他设备
Android应用源码蓝牙聊天通讯有注释项目源码可以实现两个蓝牙间的单方面通讯,项目源码注释比较清晰,核心代码也已经封装成类了,看完本套源码应该可以很快上手蓝牙相关功能。Android对于蓝牙开发sdk最低支持是2.0,...
因公司项目需要,根据Hbuilder文档开发的的BLE(低功耗蓝牙)数据写入及数据接收功能,可以使用
h5+连接蓝牙打印机打印小票,h5+调用蓝牙打印机打印小票。运用框架:mui.js;jquery。h5+连接蓝牙打印机,并打印小票,打印机指令集esc/pos。
Anroid 蓝牙如何在Framework层实现BT的自动配对,多年安卓开发经验,从实际项目中获取到的经验,对安卓开发者非常有帮助。
实现了蓝牙扫描,配对,通信功能,解压导入即可无错运行。
蓝牙客户端实现,非完整项目
项目实现了android 蓝牙串口的搜索、配对、连接和通信等完整功能。之前本站也发布过一个关于蓝牙的<a href="http://javaapk.com/source/37.html" target="_blank">Android应用源码蓝牙聊天通讯有注释项目源码。因为...
适合APP inventor或智能设备开发的初学者借鉴,通过该简单修改源码可以将蓝牙通讯应用到聊天、智能小车等设备的APP控制等开发项目中。