通过蓝牙IPhone SDK发送字符串

2023-11-29

如何将字符串从 iPhone 发送到另一个设备(android、pc 等)?


EDITED

以下代码用于通过蓝牙传输消息 视图控制器.h 文件

#import <UIKit/UIKit.h>
#import <GameKit/GameKit.h>

@interface ViewController : UIViewController <GKSessionDelegate, GKPeerPickerControllerDelegate>

@property (strong, nonatomic) UILabel           *messageReceivedLabel;
@property (strong, nonatomic) UITextField       *messageToSendTextField;
@property (strong, nonatomic) GKSession         *session;
@property (strong, nonatomic) UIButton          *sendButton; 

@end

视图控制器.m 文件

#import "ViewController.h"

@interface ViewController ()
- (void)sendMessage:(id)sender;
- (void)connectToDevice:(id)sender;

@end

@implementation ViewController

@synthesize messageReceivedLabel    = _messageReceivedLabel;
@synthesize messageToSendTextField  = _messageToSendTextField;
@synthesize session                 = _session;
@synthesize sendButton              = _sendButton;

- (void)connectToDevice:(id)sender
{
    if (self.session == nil) {
        //create peer picker and show picker of connections
        GKPeerPickerController *peerPicker = [[GKPeerPickerController alloc] init];
        peerPicker.delegate = self;
        peerPicker.connectionTypesMask = GKPeerPickerConnectionTypeNearby;
        [peerPicker show];
    }

}

- (void)sendMessage:(id)sender 
{   
    //package text field text as NSData object 
    NSData *textData = [self.messageToSendTextField.text dataUsingEncoding:NSASCIIStringEncoding];
    //send data to all connected devices
    [self.session sendDataToAllPeers:textData withDataMode:GKSendDataReliable error:nil];

}

#pragma mark - 
#pragma mark - GKPeerPickerControllerDelegate
- (GKSession *)peerPickerController:(GKPeerPickerController *)picker sessionForConnectionType:(GKPeerPickerConnectionType)type
{
    //create ID for session
    NSString *sessionIDString = @"MTBluetoothSessionID";
    //create GKSession object
    GKSession *session = [[GKSession alloc] initWithSessionID:sessionIDString displayName:nil sessionMode:GKSessionModePeer];
    return session;
}

- (void)peerPickerController:(GKPeerPickerController *)picker didConnectPeer:(NSString *)peerID toSession:(GKSession *)session
{
    //set session delegate and dismiss the picker
    session.delegate = self;
    self.session = session; 
    picker.delegate = nil;
    [picker dismiss];
}

#pragma mark - 
#pragma mark - GKSessionDelegate
- (void)session:(GKSession *)session peer:(NSString *)peerID didChangeState:(GKPeerConnectionState)state
{
    if (state == GKPeerStateConnected){
        [session setDataReceiveHandler:self withContext:nil]; //set ViewController to receive data
        self.sendButton.enabled = YES; //enable send button when session is connected
    }
    else {
        self.sendButton.enabled = NO; //disable send button if session is disconnected
        self.session.delegate = nil; 
        self.session = nil; //allow session to reconnect if it gets disconnected
    }
}

- (void)receiveData:(NSData *)data fromPeer:(NSString *)peer inSession:(GKSession *)session context:(void *)context
{   
    //unpackage NSData to NSString and set incoming text as label's text
    NSString *receivedString = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    self.messageReceivedLabel.text = receivedString;

}

- (void)viewDidLoad
{
    [super viewDidLoad];

    //Button to connect to other device
    UIButton *connectButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    connectButton.frame = CGRectMake(20.0f, 20.0f, 80.0f, 40.0f);
    [connectButton setTitle:@"Connect" forState:UIControlStateNormal];
    connectButton.tintColor = [UIColor darkGrayColor];
    [connectButton addTarget:self action:@selector(connectToDevice:) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:connectButton];

    //Button to send message to other device
    UIButton *sendButton_ = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    sendButton_.frame = CGRectMake(220.0f, 20.0f, 80.0f, 40.0f);
    [sendButton_ setTitle:@"Send" forState:UIControlStateNormal];
    sendButton_.tintColor = [UIColor darkGrayColor];
    sendButton_.enabled = NO; //set button as disabled until connection is made
    [sendButton_ addTarget:self action:@selector(sendMessage:) forControlEvents:UIControlEventTouchUpInside];
    self.sendButton = sendButton_;
    [self.view addSubview:self.sendButton];

    //Label for message that is received
    self.messageReceivedLabel = nil;
    CGRect messageReceivedLabel_Frame = CGRectMake(20.0f, 80.0f, 280.0f, 44.0f);
    UILabel *messageReceivedLabel_ = [[UILabel alloc] initWithFrame:messageReceivedLabel_Frame];
    messageReceivedLabel_.textAlignment = UITextAlignmentCenter;
    messageReceivedLabel_.font = [UIFont boldSystemFontOfSize:20.0f];
    self.messageReceivedLabel = messageReceivedLabel_;
    [self.view addSubview:self.messageReceivedLabel];

    //Text field to input message to send
    CGRect messageToSendTextField_Frame = CGRectMake(20.0f, 144.0f, 280.0f, 44.0f);
    UITextField *messageToSendTextField_ = [[UITextField alloc] initWithFrame:messageToSendTextField_Frame];
    messageToSendTextField_.font = [UIFont systemFontOfSize:20.0f];
    messageToSendTextField_.backgroundColor = [UIColor whiteColor];
    messageToSendTextField_.clearButtonMode = UITextFieldViewModeAlways;
    messageToSendTextField_.placeholder = @"Enter a message to send";
    messageToSendTextField_.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;
    self.messageToSendTextField = messageToSendTextField_;
    [self.view addSubview:self.messageToSendTextField];

}


- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}


@end

然后包含 GameKit.framework 并运行项目。

它非常适合我的设备。

希望这段代码对你有很大帮助

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过蓝牙IPhone SDK发送字符串 的相关文章

随机推荐

  • Oozie 与 Hadoop 2,作业挂在“RUNNING”状态

    我有一个带有 java 操作节点的工作流程作业 使用 Hadoop 2 1 0 2 0 4 0 38 和 Oozie 3 3 2 2 0 4 0 运行 当我提交作业时 我在 Hadoop 资源管理器屏幕中看到 2 行 1 原职位名称 2 使
  • C++内存模型是否提供有关构造函数操作的保证[关闭]

    Closed 这个问题需要多问focused 目前不接受答案 如何确保新构造的不可变对象可以在 C 线程之间安全共享 C 内存模型是否为构造函数的操作提供保证 当多个线程共享对某个对象的访问并且该对象被修改时 可能会出现竞争危险 这些问题可
  • IIS WCF 服务托管与 Windows 服务

    我们开发了一个 WCF 服务 并希望部署它 我们的客户将使用它basicHttpBinding但我们的内部团队将使用它namedPipesBinding 我们想知道将其托管在 IIS 7 中或使用 Windows 服务是否更好 我们运行了一
  • 无法安装 numpy - 需要 MS Visual C++ 14.1。但是已经安装了

    我在 Windows 10 上使用 pypy3 6 v7 3 0 我正在尝试安装 numpypip install numpy 但我不断收到错误 error Microsoft Visual C 14 1 is required Get i
  • 根据 Woocommerce 中的选定值显示或隐藏注册字段

    我正在尝试为我的网站定制注册表单 我一直在使用本指南 并已成功为我的注册表单创建 存储其他字段 定制注册指南 I have created a drop down select field in my registration form f
  • SQLite 中如果不存在则更改表添加列

    我们最近需要向一些现有的 SQLite 数据库表添加列 这可以通过以下方式完成ALTER TABLE ADD COLUMN 当然 如果表已经被更改 我们不想理会它 不幸的是 SQLite 不支持IF NOT EXISTS条款ALTER TA
  • 如何在Spring MVC中使用第三方WSDL服务

    我编写了一些服务 由 Android 应用程序使用 它接受请求并以 json 形式发送响应 现在我有一个场景 我必须通过提供的 WSDL 文件使用第三方 Web 服务 我不知道该怎么做 有人可以帮忙吗 这是我的dispatcher serv
  • Pipfile 和 Pipfile.lock 如何使用?

    看起来Pipfile Pipfile lock旨在替代requirements txt 在Python打包的上下 文中 然而 关于它们如何实际工作的文档并不多 我在 Python 网站的 PyPi 部分找到了 pipfile 的不断发展的描
  • Google App Engine 支持 Java 脚本引擎吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我想在 Google App Engine 运行时内动态评估 JavaScript 代码 Java有这个功能 但想知道GAE是否也支持这个功能 如果您能提供一个简单的代码将不胜感激
  • 自动将文件部署到 Amazon S3?

    我有一个 Rails 项目 我将把它部署到令人惊叹的地方Heroku 我真的希望能够自动将我的资源推送到 Amazon S3 本例中的资源是我的图像 样式表和 JavaScript 显然 我可以自己编写某种 capistrano 任务来执行
  • 使用 Swift 中其他视图中的视图输入的文本(Xcode 6)

    我对 Swift 和 Xcode 几乎完全陌生 所以请原谅我在这个领域缺乏知识 目前我有一个带有标签的视图控制器 我想在此之前添加一个视图 其中有一个文本字段 用户在其中输入名称 然后应用程序转到带有标签的第二个视图 其中用户输入的名称放置
  • Spring 中的 NoClassDefFoundError

    我编写了一个在 Weblogic 10 3 上运行的 Spring 应用程序 在此应用程序中 我有一些 JMS 队列使用者 有时 当应用程序关闭或打开时 我会收到错误消息 我在两种情况下都看到了此错误 java lang NoClassDe
  • 如何在 Google Colab 上安装 auto-sklearn?

    我想用自动学习 我使用了这个代码document 所有软件包均已安装 但我遇到了这样的错误 curl https raw githubusercontent com automl auto sklearn master requiremen
  • 并行流上的 Skip() 是否存在良好的用例?

    2015 年 9 月编辑 当我最初于 2015 年 2 月提出这个问题时 该行为在链接的问题虽然是违反直觉的kind of规范允许 尽管文档中存在一些小小的不一致 然而 Tagir Valeev 在 2015 年 6 月 提出了一个新问题
  • VBA Microsoft Word - 序列号

    我已经手动完成了此操作 我想将 ZXZ 的每个实例替换为从 1 一直到 Word 文档中最后一次出现的 ZXZ 的序列号 基本上 我想要实现的是在特定的Word文档中运行Word VBA宏 其中VBA宏从文件顶部开始搜索 查找每个出现的ZX
  • 点击后退按钮完成 UITextField 的编辑

    我的 NavigationController 中有 2 个控制器 首先将第二个推入堆栈 用户可以与那里的文本字段进行交互 然后 在一种情况下 用户将点击后退按钮以转到上一个屏幕 假设第二个实例的加载是 重 的 所以一旦需要 我将只保留它的
  • Python 中与密钥库的 https 握手

    我设置了一个 Web 服务器 该服务器拒绝没有有效 p12 证书的连接 我需要通过 Python 脚本访问在服务器上运行的 REST API 但我找不到有关如何执行此操作的任何信息 如果有人有关于如何在 Python 中使用 p12 证书执
  • 如何增加 VC9 (MSVC 2008) 中允许的修饰名称长度?

    我有一组相当大且复杂的程序要从 VC8 移植到 VC9 其中一个模块具有许多分层的 typedef 这会导致编译器生成 C4503 警告 修饰名被截断 生成的LIB文件将无法正确链接到项目中的其他模块 VC8 对此没有遇到任何问题 这让我得
  • Android - 是否可以通过编程方式获取安装引荐来源网址

    我注意到浏览器中的一些 Google Play 应用程序链接有referrer 它们的属性 这显然告诉了将您发送到 Google Play 中该应用程序页面的引荐来源网址 是否可以在我的应用程序代码中看到该引荐来源网址 如果有 如果没有 是
  • 通过蓝牙IPhone SDK发送字符串

    如何将字符串从 iPhone 发送到另一个设备 android pc 等 EDITED 以下代码用于通过蓝牙传输消息 视图控制器 h 文件 import