通訊
* 只能運用在IOS設備
之間同一個使用
內銜接
* 從IOS7
開端過時了
* 但是GameKit是最根本的
藍牙通訊框架
* 經過藍牙可以完成文件的共享(僅限設備沙盒中的文件)
* 此框架普通用於游戲開發(比方五子棋對戰)
開端案例
簡介:
* 運用藍牙將兩個IOS設備銜接起來
* 搜索對方的設備
* 完成將手機中的圖片發送給對方
界面的搭建:
藍牙互連:
搜索藍牙設備
// 初始化鏈接藍牙控制器
GKPeerPickerController *peerCtr = [[GKPeerPickerController alloc]init];
// 顯示婚配到的藍牙設備
[peerCtr show];
GKPeerPickerController
最重要的兩個代理
/**
* 鏈接成功
*
* @param picker 藍牙控制器
* @param peerID 銜接藍牙的設備id
* @param session 銜接藍牙的會話(通訊)用來傳數據
*/
- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session
{
NSLog(@"%s %d",__func__,__LINE__);
// 隱藏藍牙控制器
[picker dismiss];
}
// 加入銜接
- (void)peerPickerControllerDidCancel:(GKPeerPickerController *)picker
{
NSLog(@"%s %d",__func__,__LINE__);
}
選擇圖片:
選擇圖片辦法
// 選擇圖片
- (IBAction)chooseImage {
// 1.初始化圖片選擇控制器
UIImagePickerController *imgPicker = [[UIImagePickerController alloc]init];
// 2.判別圖庫能否可用
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum]) {
// 3.設置圖庫翻開的類型
imgPicker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
// 4. 設置代理
imgPicker.delegate = self;
// 5. 翻開圖庫
[self presentViewController:imgPicker animated:YES completion:nil];
}
}
選擇圖片控制器的代理辦法
/**
* 圖片選擇完成調用
*
* @param picker 圖片選擇控制器
* @param info 選擇的信息
*/
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
{
NSLog(@"info == %@",info);
// 設置選擇的圖片為以後的顯示圖片
self.showImageView.image = info[UIImagePickerControllerOriginalImage];
// 隱藏以後選擇圖片控制器
[picker dismissViewControllerAnimated:YES completion:nil];
}
圖片互相發送:
需求在銜接成功代理辦法中存儲以後的會話
// 保管以後回話
self.m_Session = session;
發送圖片辦法
// 發送圖片
- (IBAction)sendImage {
// 拿到需求發送出去的圖片
UIImage *image = self.showImageView.image;
// 將圖片轉換成NSData類型
NSData *imgData = UIImagePNGRepresentation(image);
/**
* 發送數據給一切婚配上的用戶
*
* @param GKSendDataMode 數據發送的形式:(平安/不平安形式)
* GKSendDataUnreliable : 不平安形式:好像發10個傳單,傳單直接往人群中砸過來,能不能收到不論
* GKSendDataReliable:平安形式:好像發10個傳單,每一個傳單都得發到路人的手上,才再發下一個傳單
* @return
*/
[self.m_Session sendDataToAllPeers:imgData withDataMode:GKSendDataUnreliable error:nil];
}
設置圖片:
GameKit提供的承受數據是辦法的回調
需求監聽接納傳遞過去的數據
/** 監聽傳遞過去的數據
* setDataReceiveHandler: 由哪個對象來監聽數據的承受
* withContext : 監聽需求傳遞的參數
*/
[session setDataReceiveHandler:self withContext:nil];
完成監聽辦法
只設置由誰監聽傳遞過去的數據還是缺乏的,由於我們還是不能拿到傳遞過去的數據,進入監聽辦法的頭文件可以看到 // SEL = -receiveData:fromPeer:inSession:context:
所以我們必需完成這個辦法才干拿到接納到的數據,這個回調辦法辦法在Xcode 7之前的版本的解釋如圖: /**
* 完成接納數據的回調辦法
*
* @param data 接納到的數據
* @param peer 傳遞數據的設備ID
* @param session 以後回話
* @param context 注冊監聽傳遞過去的數據
*/
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context
{
// 由於傳遞過去的是圖片,所以我們直接運用UIImage來承受
UIImage *image = [UIImage imageWithData:data];
// 設置圖片
self.showImageView.image = image;
}
【iOS之藍牙簡介和運用(一):GameKit】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!