藍牙
GameKit
簡介:
* 實現藍牙設備之間的通信
* 只能使用在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 {
// 判斷圖片是否存在
if (!self.showImageView.image) return;
// 拿到須要發送出去的圖片
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];
}
設置圖片:
/**
* 實現接收數據的回調方法
*
* @param data 接收到的數據
* @param peer 傳遞數據的設備ID
* @param session 當前回話
* @param context 註冊監聽傳遞過來的數據
*/
- (void) receiveData:(NSData *)data fromPeer:(NSString *)peer inSession: (GKSession *)session context:(void *)context
{
// 判斷是否有數據進來
if (!data) return;
// 由於傳遞過來的是圖片,因此咱們直接使用UIImage來接受
UIImage *image = [UIImage imageWithData:data];
// 設置圖片
self.showImageView.image = image;
}