天道酬勤,学无止境

在 iOS 中通过蓝牙在两个设备之间传输 NSString(Transfer NSString between two devices via bluetooth in iOS)

问题

我想通过蓝牙在两个 iOS 设备之间传输NSString 。 有人可以帮忙如何通过蓝牙传输NSString吗? 我搜索了具体的答案和示例代码,但找不到。 请指导我。

提前致谢。!!

回答1

我将更广泛地评论如何将MCSession用于这种简单的情况,因为当我第一次熟悉MCSession ,我惊讶于如何在不添加额外MCSession情况下使用简单的MCSession信息很少MCBrowserViewController层。

在您的 .h 中,添加以下委托: MCSessionDelegateMCNearbyServiceAdvertiserDelegateMCNearbyServiceBrowserDelegate 。 还为MCPeerID *devicePeerIDMCSession *sessionMCNearbyServiceAdvertiser *serviceAdvertiserMCNearbyServiceBrowser *nearbyServiceBrowser声明类实例变量。

在您的 .m 文件中,在 viewDidLoad 期间或您希望启动MCSession之前的任何其他时间,初始化您的MCPeerID

devicePeerId = [[MCPeerID alloc] initWithDisplayName:DISPLAY_NAME];

然后使用该MCPeerID初始化MCSession

session = [[MCSession alloc] initWithPeer:devicePeerId securityIdentity:nil encryptionPreference:MCEncryptionNone];
session.delegate = self;

现在,为了避免使用MCBrowserViewController ,您必须初始化您自己的MCNearbyServiceAdvertiser以允许您的设备广告会话, MCNearbyServiceBrowser以允许您的设备查找会话,或者您甚至可以在同一设备上初始化 BOTH 以允许同时广告和浏览:

serviceAdvertiser = [[MCNearbyServiceAdvertiser alloc] initWithPeer:myDevicePeerId discoveryInfo:nil serviceType:SERVICE_TYPE];
serviceAdvertiser.delegate = self;
// (I've set discoveryInfo to nil here, but it can also contain an NSDictionary of data to pass along to browsers who find this advertiser via the browser:foundPeer:withDiscoveryInfo method)

nearbyServiceBrowser = [[MCNearbyServiceBrowser alloc] initWithPeer:myDevicePeerId serviceType:SERVICE_TYPE];
nearbyServiceBrowser.delegate = self;

接下来,如果您已将设备设置为广告商,则需要实现MCNearbyServiceAdvertiserDelegate方法。

来自浏览同行的邀请:

- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void (^)(BOOL, MCSession *))invitationHandler {

    NSLog(@"invitation received");

    if (want_to_accept_invitation)
        invitationHandler(YES, session);
    else
        invitationHandler(NO, session);

}

如果设备由于某种原因尚未开始广告,则收到错误消息:

- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didNotStartAdvertisingPeer:(NSError *)error {
    NSLog(@"Did not start advertising error: %@", error);
}

同样,如果您将设备设置为浏览器,则需要实现MCNearbyServiceBrowserDelegate方法:

// Peer found
- (void)browser:(MCNearbyServiceBrowser *)browser foundPeer:(MCPeerID *)peerID withDiscoveryInfo:(NSDictionary *)info {

    NSLog(@"Session Manager found peer: %@", peerID);

    if (want_to_connect)
        [serviceBrowser invitePeer:peerID toSession:session withContext:nil timeout:CONNECTION_TIMEOUT];

} 

// Peer lost, ex. out of range
- (void)browser:(MCNearbyServiceBrowser *)browser lostPeer:(MCPeerID *)peerID {
    NSLog(@"Session Manager lost peer: %@", peerID);

}

- (void)browser:(MCNearbyServiceBrowser *)browser didNotStartBrowsingForPeers:(NSError *)error {
    NSLog(@"Did not start browsing for peers: %@", error);
}

然后你需要MCSessionDelegate方法来帮助通知用户改变连接状态并促进数据的发送和接收:

- (void)session:(MCSession *)session didReceiveCertificate:(NSArray *)certificate fromPeer:(MCPeerID *)peerID certificateHandler:(void (^)(BOOL accept))certificateHandler {
    NSLog(@"Did receive certificate");
    certificateHandler(true);
}

// To detect changes in the state of your connections with your peers….
- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state {

    switch (state) {
        case MCSessionStateConnected: {

            NSLog(@"Connected to %@", peerID);

            //  If you'd like to send your text string as soon as you're connected...
            NSError *error;
            [session sendData:[@"text" dataUsingEncoding:NSUTF8StringEncoding] toPeers:[NSArray arrayWithObject:peerID] withMode:MCSessionSendDataReliable error:&error];

            break;
        } case MCSessionStateConnecting: {
            NSLog(@"Connecting to %@", peerID);

            break;
        } case MCSessionStateNotConnected: {
            break;
        }
    }
}


- (void)session:(MCSession *)session didReceiveData:(NSData *)data fromPeer:(MCPeerID *)peerID {
    NSLog(@"Did receive data.");

    /// Receive the string here.
    NSString *message = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];

}

请注意,为了发送数据,我使用了:

[session sendData:[@"text" dataUsingEncoding:NSUTF8StringEncoding] toPeers:[NSArray arrayWithObject:peerID] withMode:MCSessionSendDataReliable error:&error];

一旦用户与他的对等方连接,就传输数据。 但是这一行可用于在代码的其他地方发送数据,例如:

- (void)sendMessageToAllPeers:(NSString *)message {
    [session sendData:[message dataUsingEncoding:NSUTF8StringEncoding] toPeers:session.connectedPeers withMode:MCSessionSendDataReliable error:&error];
}

- (void)sendMessage:(NSString *)message toPeerIDs:(NSArray *)peerIDs {
    [session sendData:[message dataUsingEncoding:NSUTF8StringEncoding] toPeers:peerIDs withMode:MCSessionSendDataReliable error:&error];
}

最后,要开始/停止广告您的广告商和/或浏览器,您可以调用[_serviceAdvertiser start/stopAdvertisingPeer][_nearbyServiceBrowser start/stopBrowsingForPeers]

- (void)start {
    [serviceAdvertiser startAdvertisingPeer];
    [nearbyServiceBrowser startBrowsingForPeers];
}

- (void)stop {
    [serviceAdvertiser stopAdvertisingPeer];
    [nearbyServiceBrowser stopBrowsingForPeers];
}

还有其他方法,但这些是基础。 不过写得相当快,所以任何人都应该随时修改!

回答2

查看苹果开发者论坛的BTLE Transfer源代码

我希望这能帮助您使用蓝牙将字符串或任何数据从一台设备传输到另一台设备。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 通过蓝牙在iOS和Android之间传输数据?(Transfer data between iOS and Android via Bluetooth?)
    问题 我一直在阅读如何使用GameKit通过蓝牙在iOS设备之间传输数据。 我本质上不是在写游戏,但是确实需要在两个设备之间传输少量的二进制数据。 在两个iOS设备之间,这很容易。 但是,我想知道是否可以通过相同的机制在iOS设备和Android设备之间传输数据。 有没有人遇到过说明如何做到这一点的文档/教程? 在技​​术上甚至可行吗? 还是苹果采取了某种限制措施来防止这种情况发生? 我发现的另一个选择是通过蓝牙的Bonjour。 对于这种类型的操作,这会是一个更合适的选择吗? 回答1 这个问题在这个网站上已经被问过很多次了,最终的答案是:不,您不能通过蓝牙将Android手机连接到iPhone ,是的苹果公司对此有限制。 一些可能的选择: 正如您所提到的,通过WiFi的Bonjour。 但是,我找不到适合它的全面教程。 一些基于Internet的同步服务,例如Dropbox,Google Drive,Amazon S3。 这些通常具有用于多个平台的库。 通过套接字直接进行TCP / IP通信。 (如何在iOS中编写小型(套接字)服务器) 解决Android方面的问题后,低功耗蓝牙将成为可能(iOS和Android之间通过Bluetooth LE进行通信) 最酷的选择:使用凹凸API。 它具有iOS和Android支持,并且非常易于集成。 对于较小的有效载荷
  • 使用蓝牙LE在iOS和Android之间进行通信(Communicating between iOS and Android with Bluetooth LE)
    问题 我有一个使用CoreBluetooth可以在iPad(中央)和iPhone(外围设备)之间进行通信的应用程序。 我有一项服务有两个特点。 我有一个运行最新的Android 4.3(支持BTLE)的Nexus 7。 Android赶上BTLE潮流有点晚了,但似乎他们采用的方法与iOS相似,最初它们仅支持充当中心功能,而更高版本则采用外围模式。 我可以加载示例Android BTLE应用并浏览附近的外围设备。 使用我的iPhone广告作为外围设备,我可以在Android端附近的外围设备列表中看到CBAdvertisementDataLocalNameKey的值。 我可以连接到iPhone,并且建立连接后,蓝牙符号会从浅灰色变为黑色。 连接始终会精确地持续10秒钟,然后断开连接。 在Android方面,我应该会在连接后立即看到可用服务和特性的列表。 我已经证明Android代码设置正确,因为我可以将其连接到我拥有的TI CC2541DK-SENSOR硬件上,并且在连接到它时会列出所有服务和特性。 最近几天,我花了很多时间对问题进行故障排除。 问题是我无法确定哪个设备出现错误并因此导致断开连接。 在连接阶段或服务发现阶段,没有来自CBPeripheralManagerDelegate的回调,所以我不知道在什么时候发生错误(如果错误是在iOS端)。 在Android方面
  • Unity_IOS_蓝牙通信
    一、开场白: 1》首先给大家推荐下关于IOS蓝牙开发的相关资料博客链接(相当不错的文章) 1、IOS蓝牙开发_ios蓝牙4.0中心模块 2、iOS - Bluetooth 蓝牙 2》本篇博客Unity_IOS_蓝牙通信,主要核心实现功能就是通过以上两篇文章实现。有时间的朋友可以对其好好阅读。 3》本篇博客重心是Unity与IOS交互,并且实现调用IOS与蓝牙通信功能。 二、效果展示(本案例是Unity IOS 蓝牙通信,连接带有蓝牙钢琴设备) 1)图1:打开准备连接钢琴界面进行蓝牙初始化判断 2)图2:如果打开已经打开蓝牙,即可点击搜索周围蓝牙设备。 3)搜索到,点击连接需要的蓝牙设备。可以进行通信 注释:本案例是连接带有蓝牙功能的钢琴设备。连接上之后,点击钢琴键,就会发送信息,让对应的钢琴键亮。 三、开发流程 1》实现IOS与蓝牙通信,并且实现Unity与IOS交互的IOS层代码。 1.1)首先创建两个文件ViewController.h 和 ViewController.m。(可通过xcode或者记事本创建都行,文件名称可以不一样,关键在于后缀名。顾名思义一个头文件.h相当于接口类,一个.m文件相当于实现类) 1.2)首先我们在头文件ViewController.h里面定义需要导入的库,以及声明unity调用ios交互的方法。 // // ViewController.h //
  • 通过蓝牙4.0 LE发送图像文件(Sending image file over Bluetooth 4.0 LE)
    问题 我正在尝试通过Bluetooth 4.0 LE从一个iOS设备向另一个iOS设备发送.png图像文件。 我能够处理诸如字符串之类的简单数据,但是无法成功发送和利用图像文件。 在外围设备中,我首先开始 pictureBeforeData = [UIImage imageNamed:@"myImage.png"]; NSData *myData = UIImagePNGRepresentation(pictureBeforeData); 然后,使myData成为特征值。 _myCharacteristic = [[CBMutableCharacteristic alloc] initWithType:_myCharacteristicUUID properties:CBCharacteristicPropertyRead value:myData permissions:CBAttributePermissionsReadable]; 在中央设备中,当特征值更新时,我有这个 - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error { if (
  • NSUserDefaults在Watch OS2的Xcode beta上不起作用(NSUserDefaults not working on Xcode beta with Watch OS2)
    问题 我刚刚安装了最新的Xcode Beta,以尝试Swift 2和对Apple Watch开发部分的改进。 我实际上很难弄清楚为什么这种基本的NSUserDefaults方法在iOS和Watch OS2之间共享信息是行不通的。 我按照此分步教程进行了检查,以检查是否在此过程中错过了某些东西,例如为电话应用程序和分机打开了相同的组,但这是我得到的: NOTHING 。 这是我在iPhone应用程序中为ViewController编写的内容: import UIKit class ViewController: UIViewController { @IBOutlet weak var lb_testo: UITextField! let shared_defaults:NSUserDefaults = NSUserDefaults(suiteName: "group.saracanducci.test")! var name_data:NSString? = "" override func viewDidLoad() { super.viewDidLoad() name_data = shared_defaults.stringForKey("shared") lb_testo.text = name_data as? String } override func
  • iOS开发,Bluetooth你应该了解一些!
    API结构导图 CoreBluetooth中,需要用到的类和协议(完整导图): 基础知识 蓝牙分类中心端和外设端(完整导图)。 中心端(接收端) 1 .创建中心端控制器(CBCentralManager)2 .扫描设备(Discover)3 .连接 (Connect)4 .获取Service和Characteristic 扫描Service (一个service中包含一个或多个Characteristic) 获取Service中Characteristic 获取Characteristic的值 5 . 数据交互(explore and interact) 订阅Characteristic的通知 6 . 断开链接 外设端(发送端) 创建Peripheral管理对象 创建Service和Characteristic树 发送广告 处理读写请求和订阅 蓝牙状态 typedef NS_ENUM(NSInteger, CBManagerState) { CBManagerStateUnknown = 0, CBManagerStateResetting, CBManagerStateUnsupported, //不支持 CBManagerStateUnauthorized, //未授权 CBManagerStatePoweredOff, //关闭 CBManagerStatePoweredOn
  • iOS Core蓝牙不要求配对(iOS Core Bluetooth Not asking for Pair)
    问题 在我最近的项目中,我需要通信一个硬件(低功耗蓝牙)。我已经实现了所有委托方法代码。 我能够连接硬件和设备,但没有收到配对警报(附加的屏幕截图)。 为什么不要求配对? 谢谢你。 #import "BTWCentralConnectionManager.h" @implementation BTWCentralConnectionManager @synthesize cbcManager; @synthesize discoveredPeripheral; @synthesize findMeServiceCharacteristic; @synthesize findMeService; @synthesize delegate=_delegate; static NSString *kFindMeServiceUUID=@"1802"; static NSString *kFindMeCharacteristicUUID=@"2A06"; static BTWCentralConnectionManager* connectionManager = nil; +(BTWCentralConnectionManager *)sharedConnectionManager{ @synchronized(self) { if (!connectionManager){
  • 如何在两个设备(android,iphone)之间传输“数据”?(How to transfer “data” between two device (android,iphone)?)
    问题 如何在两台设备之间传输数据? 我想在不同平台(android、iphone)之间传输数据(主要是图像文件)。 是否可以使用 p2p 或我应该使用客户端 - 服务器? 任何帮助将不胜感激。 回答1 虽然在某些情况下 p2p 是可能的,但您将实现与客户端-服务器架构最广泛的兼容性,代价是必须部署、供电、连接和维护服务器。 您将能够同时使用 wifi 接入点和移动(3g 等)网络您在系统中已准备好衡量(或限制)使用情况和/或插入广告您不必担心防火墙会阻止到设备的入站连接(在 wifi 上很常见,在移动设备上几乎总是如此) 设备的相对位置无关紧要您不仅可以与智能手机和平板电脑进行互操作,还可以与传统 PC 和笔记本电脑进行互操作 回答2 你看过高通的 AllJoyn 库吗? 它仅适用于蓝牙或 wifi。 以下代码是从此 Incorporating Socket Programming 复制到您的应用程序中 public class ServerActivity extends Activity { private TextView serverStatus; // default ip public static String SERVERIP = "10.0.2.15"; // designate a port public static final int SERVERPORT
  • 如何在背景和前景中使用iOS 7.1中的Bluetooth LE检测附近的设备?(How to detect nearby devices with Bluetooth LE in iOS 7.1 both in background and foreground?)
    问题 我有一个需要检测附近(在蓝牙LE范围内)运行相同应用程序和iOS 7.1的设备的应用程序。 我已经考虑了两种检测方法: 让设备充当iBeacon并检测范围内的iBeacon 使用CoreBluetooth(类似于此处的Vicinity实现)创建BLE外围设备,进行宣传并扫描外围设备 似乎选项1是不可能的,因为: 当应用程序在后台运行时,iOS可能至少需要15分钟才能检测到进入信标区域(iOS 7.1) 备选方案2似乎可行,但在实施方面存在一些困难: iOS似乎在一定时间段(大约15分钟?)后更改了广告包中的外围UUID。 这意味着不可能直接从广告广播信号中识别出广告设备。 对此,我有以下问题: 我没有考虑过其他实现附近设备检测的方法吗? 是否可以通过广告(或通过其他方式)识别设备,以便选项2起作用? 回答1 我找到了使核心蓝牙工作的方法(选项2),该过程大致如下: 该应用程序使用CBAdvertisementDataLocalNameKey已编码设备唯一标识符(当广播应用程序运行在前台时)和通过蓝牙LE服务提供设备唯一标识符的特征(当广播应用程序在后台运行时)进行广告自身。 同时,应用程序扫描具有相同服务的其他外围设备。 广告的工作方式如下: 为了使其他设备能够识别该设备,我使用了每设备唯一的UUID(我使用的是Urban Airship的[UAUtils deviceID]
  • 在iOS中通过蓝牙播放时从内置麦克风进行录制(Recording from Built-In Mic when Playing through Bluetooth in iOS)
    问题 是否可以从 iPhone 的内置麦克风接收音频输入,并同时通过蓝牙耳机播放该音频? 我的目标是始终将内置麦克风用作输入设备,即使输出设备是头戴式耳机,因为在我的用例中,内置麦克风更方便。 当输出设备是有线耳机时,我知道如何实现我的目标,比如与 iPhone 捆绑在一起的耳机。 我只需插入有线耳机,然后调用以下方法: - (void)selectBuiltInMicrophone { AVAudioSession *session = [AVAudioSession sharedInstance]; for (AVAudioSessionPortDescription *port in session.availableInputs) if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic]) { NSError *error; [session setPreferredInput:port error:&error]; break; } } 通过调用上述方法,输入设备将从有线耳机的麦克风切换到iPhone的内置麦克风,而输出设备保持不受影响,因此iPhone将从内置麦克风录音并通过有线耳机播放。 这就是我的期望。 问题是,当耳机为蓝牙耳机时,此方法不起作用。 如果我将蓝牙耳机连接到iPhone
  • 在Android中通过蓝牙接收音频(Receive audio via Bluetooth in Android)
    问题 我想创建一个能够接收音频流的Android应用程序。 我曾考虑过使用A2DP配置文件,但似乎Android不支持A2DP接收器。 似乎有很多人正在寻找解决此问题的方法。 但是,如何接收普通的比特流,然后在应用程序中将数据转换为音频呢? 我当时想通过RFCOMM(SPP蓝牙配置文件)接收PCM或Mp3数据流,然后使用AudioTrack播放它。 首先,如何通过RFCOMM在Android手机上接收比特流? 是否可以通过RFCOMM以PCM或Mp3流的形式接收比特流? 其次,如果不可能通过RFCOMM以PCM或Mp3流的形式接收位流,如何将接收到的位流转换为音频? 第三,如何将接收到的数据转换为音频并“实时”同时播放音频? 我可以只使用onDataReceived吗? 需要明确的是,我对使用A2DP配置文件不感兴趣! 我想通过RFCOMM(SPP蓝牙配置文件)流式传输数据。 接收到的数据流将为PCM或Mp3。 我曾想编写自己的应用程序,但是如果有人知道有应用程序可以解决这个问题,我将很高兴听到它! 我正在使用Android 2.3 Gingerbread。 /约翰尼 回答1 号试图写一个Android应用程序来处理这不是解决办法。 至少如果要使用A2DP Sink角色。 事实是,正如您提到的,Android并未实现有关A2DP sink功能的对BlueZ
  • 如何获取可用的蓝牙设备列表?(How to get list of available Bluetooth devices?)
    问题 我目前正在创建一个可以使用蓝牙设备的iPhone应用程序(Xcode 4.3.1,IOS 5)! 此应用程序的主要目标是室内导航(建筑物内的GPS并非真正准确)。 我在这里看到的唯一解决方案(将我的应用保留在AppStore上)是尝试扫描可用的蓝牙设备! 我尝试使用CoreBluetooth框架,但未获得可用设备的列表! 也许我没有正确使用这些功能 #import <UIKit/UIKit.h> #import <CoreBluetooth/CoreBluetooth.h> @interface AboutBhyperView : UIViewController <CBPeripheralDelegate, CBCentralManagerDelegate> { CBCentralManager *mgr; } @property (readwrite, nonatomic) CBCentralManager *mgr; @end - (void)viewDidLoad { [super viewDidLoad]; mgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; } - (void)centralManager:(CBCentralManager *)central
  • 多个蓝牙连接(Multiple bluetooth connection)
    问题 我想通过蓝牙连接3个设备(我的Droid必须连接到2个蓝牙设备)。 我已使用蓝牙聊天将Droid连接到1台设备,如何为多个蓝牙设备对其进行修改? 请问你能帮帮我吗? 回答1 我正在寻找一种通过蓝牙连接4台设备的方法,发现了以下内容。 http://groups.google.com/group/android-developers/browse_thread/thread/69d7810f6ef9bb7d 我不确定这就是您想要的。 但是,要使用蓝牙连接2个以上的设备,您必须为要连接的每个设备创建一个不同的UUID。 单击链接查看代码示例和更好的解释。 回答2 您可以尝试使用我的lib进行多个蓝牙连接: http://arissa34.github.io/Android-Multi-Bluetooth-Library/ 回答3 您是否研究过BluetoothAdapter Android类? 您将一台设备设置为服务器,将另一台设备设置为客户端。 将多个客户端连接到服务器可能(尽管我本人并未对此进行研究)。 我已经成功地将蓝牙音频设备连接到电话,同时它也将BluetoothAdapter连接到另一部电话,但是我没有尝试使用三部电话。 至少这告诉我,蓝牙无线电可以容忍多个同时连接:) 回答4 两个UE Boom蓝牙扬声器可以形成立体声,这意味着电话可以同时流式传输到两个蓝牙设备。
  • iOS 中通过 wifi 的点对点网络(Peer-to-peer network over wifi in iOS)
    问题 我已经在这几天了,似乎无法找到解决方案。 我想在 iOS 上通过 wifi 创建一个对等网络。 所有开源代码似乎都支持运行服务器或作为客户端,但没有构建代码来支持两者 - 对等。 有人知道我可以这样做吗? 回答1 iOS 7 正是为此目的添加了多点连接框架。 回答2 你有没有想过使用苹果的 GameKit 框架? 我过去曾将它用于设备之间的一些简单通信。 这真的很简单,可以让你快速走出大门。 这看起来是一个很好的教程。 回答3 我认为 Open Peer 是正确的解决方案。 它提供了设备之间真正的直接点对点连接,无需中央服务器。 看看这个介绍视频。 回答4 您无法使用当前 API 在 iOS 中以编程方式创建 wi-fi 网络。 然而,GameKit 提供了一些 API 来通过蓝牙进行操作。 如果您希望使用 CocoaHTTPServer 实现自定义解决方案,请注意您仍然无法创建直接的 wi-fi 连接,您只能连接同一(预先存在的)wi-fi 网络上的设备。 iOS 中的点对点 Wi-Fi(例如 802.11s)还需要几年的时间。 也许 iOSX ;) 回答5 iOS 支持 Multipeer Connectivity 框架,该框架使 iOS 设备能够通过蓝牙、基础设施(带有路由器)、WiFi 或 P2P 相互通信。 但是,它没有提供明确使用 P2P 的方法。
  • Android蓝牙连接另一个蓝牙设备(Android Bluetooth to connect another bluetooth device)
    问题 我正在做基于蓝牙的应用程序,我想连接其他设备,例如诺基亚设备和打印机。 我参考了android蓝牙文档http://developer.android.com/guide/topics/connectivity/bluetooth.html。 它演示了所有基本的蓝牙API功能,而我做了所有这些事情 Scanning for other Bluetooth devices Querying the local Bluetooth adapter for paired Bluetooth devices Establishing RFCOMM channels/sockets Connecting to a remote device Transfering data over Bluetooth 我从BluetoothChat(Android示例)获得参考。 BluetoothChat This application send data to another android device but for that this application must be installed in both the devices. 像这样如何通过代码通过蓝牙将文件从Android设备发送到其他设备 我想要的是 我想从我的应用程序将文件从一个设备发送到另一台设备
  • iBeacon:didRangeBeacons不再被呼叫,必须重置设备才能使其再次工作(iBeacon: didRangeBeacons stops getting called, must reset device for it to work again)
    问题 我使用的是自定义BeaconManager委托,因此信标范围不取决于视图控制器的生命周期。 一切正常,但偶尔(1-2天)信标范围将停止工作,并且didRangeBeacons将永远不会被调用。 解决此问题的唯一方法是让我重置iPhone,一旦执行此操作,它就可以完美运行。 下面是我正在使用的代码。 基本流程是,当我的ViewController调用ViewDidLoad时,它会向AppDelegate发送通知,告诉它开始对信标进行测距,因此我从不告诉它停止,因为无论用户在何处导航,我都希望它继续对信标进行测距在应用程序中。 我想知道我的代码是否引起了这个问题,或者这仅仅是蓝牙的一个错误。 谢谢你的帮助! 信标管理器 #import "BeaconManager.h" #import "AppDelegate.h" @interface BeaconManager()<CLLocationManagerDelegate> @property (nonatomic, strong) CLLocationManager *locationManager; @property (nonatomic, strong) CLBeaconRegion *beaconRegion; @end @implementation BeaconManager + (id)sharedManager
  • 在两个或多个iPhone应用程序之间共享数据(Share data between two or more iPhone applications)
    问题 是否可以在同一设备上的两个应用程序之间共享数据? 还是可以允许其他应用程序使用我的应用程序的信息/数据或以其他任何方式使用? 例如,第一个应用程序用于事件管理,而我使用它来保存一些事件。 第二个应用程序用于提醒,它将从另一个应用程序获取数据以提醒我有关该事件的信息。 这只是一个简单的示例,而不是真实的场景。 回答1 从历史上看,iPhone一直试图防止应用之间的数据共享。 这个想法是,如果您无法获得另一个应用程序的数据,那么您就无法对该应用程序做任何坏事。 在最新版本的IOS中,他们对此有所放松。 例如,iOS编程指南现在有一节介绍如何在应用程序之间传递数据,方法是让一个应用程序声明某个URL前缀,然后让其他应用程序引用该URL。 因此,也许您将事件应用设置为回答“ event://” URL,就像网络服务器回答“ http://” URL一样。 苹果公司关于这种方法的文档在这里。 窥见“实施自定义URL方案”。 回答2 在iOS开发的沙盒世界中,在应用程序之间共享数据非常困难,因为iOS开发人员无法直接通过文件系统共享数据,因此他们需要为其应用程序找到替代解决方案。 一些常见的解决方案包括: UIDocumentInteractionController UIActivityViewController 共享钥匙串访问自定义网址方案网络服务 iCloud API
  • 不推荐使用UIDevice uniqueIdentifier-现在该怎么办?(UIDevice uniqueIdentifier deprecated - What to do now?)
    问题 刚刚发现,UIDevice uniqueIdentifier属性在iOS 5中已弃用,在iOS 7及更高版本中不可用。 似乎没有其他可用的方法或属性。 我们许多现有的应用程序都严格依赖此属性来唯一标识特定设备。 我们将如何处理这个问题? 2011-2012年文档中的建议是: 特殊注意事项不要使用uniqueIdentifier属性。 要创建特定于您的应用程序的唯一标识符,您可以调用CFUUIDCreate函数来创建UUID ,然后使用NSUserDefaults类将其写入默认数据库。 但是,如果用户卸载并重新安装该应用程序,则该值将不同。 回答1 如果用户卸载并重新安装该应用程序,则CFUUIDCreate创建的UUID是唯一的:每次都会得到一个新的UUID。 但是您可能希望它不是唯一的,即当用户卸载并重新安装应用程序时,它应该保持不变。 这需要一些努力,因为最可靠的每个设备标识符似乎是MAC地址。 您可以查询MAC并将其用作UUID。 编辑:当然,您需要始终查询同一接口的MAC。 我猜最好的选择是en0 。 即使接口没有IP /已关闭,MAC始终存在。 编辑2:正如其他人所指出的那样,自iOS 6起首选的解决方案是-[UIDevice identifierForVendor]。 在大多数情况下,您应该可以将其用作旧的-[UIDevice uniqueIdentifier
  • 如何使用蓝牙连接两部iPhone?(How to use bluetooth to connect two iPhone?)
    问题 我想使用iPhone SDK在两个iPhone之间实现蓝牙连接,但是我在iPhone SDK 3.0中找不到任何蓝牙API。 有谁能够帮助我? 谢谢。 顺便说一句:是否可以通过使用蓝牙同时连接两个以上的iPhone? 回答1 您可以使用高级GameKit框架或较低级别的Bonjour发现机制(但仍易于使用)连接两部iPhone并通过蓝牙传输数据。 Bonjour还可以在3.0以下版本的iPhone上的蓝牙和WiFi之间透明地工作,因此,如果您希望在这两种类型的网络上支持iPhone到iPhone的数据传输,这是一个不错的选择。 有关更多信息,您还可以查看对以下问题的回答: “在哪里可以找到用于开发P2P应用程序的iphone sdk 3.0 GameKit教程?” “ iPhone到iPhone的联网” “ iPhone SDK 3.0中的GameKit” “ iPhone蓝牙功能在OS 3.0中受到限制吗?” 回答2 查看BeamIt开源项目。 它会通过蓝牙和WIFI进行连接(尽管它声称它不支持WIFI),并且我已经证实它可以在我的项目中很好地工作。 这将使点对点的联系变得容易。 对于多个连接,这是可能的,但是您必须编辑BeamIt源代码才能使其成为可能。 我建议阅读GameKit编程指南 回答3 我们无法通过蓝牙正常连接到iPhone。这非常困难。因此
  • Android <-> iOS 直接通信(蓝牙)。 是否可以? [复制](Android <-> iOS direct communication (Bluetooth). Is it possible? [duplicate])
    问题 这个问题在这里已经有了答案: 原则上,Android 设备是否有可能通过蓝牙/GameKit 与 iPhone 连接? (7 个回答) 7年前关闭。 首先,我是一名 Android 开发人员,所以问题涉及所有 iOS 开发人员。 是否可以实现 Android <-> iPhone/iPad直接通信? 有些人声称这是不可能的,而另一些人则声称这是不可能的。 我想两种可能的技术是蓝牙和/或 Wi-Fi Direct。 不推荐 Wi-Fi Direct,因为 Gingerbread 不支持它,据我所知,iPhone 也不支持它(也许是 iPhone 6,正如我从谣言中听到的) 众所周知,iOS设备之间使用GameKit实现蓝牙通信,这里有一个参考。 我不明白在与 GameKit 交流时有什么特别之处?? 被包裹在某种方式在开始和该消息的结尾额外字节的消息? 很好,我们可以在 Android 中以相同的方式包装消息! 消息是否加密?! 如果是这样,我们可以在 Android 设备收到它们时解密它们吗? 任何想法、变通方法或其他黑客解决方案都是受欢迎的! 回答1 iOS 中提供了三个框架,您可以使用它们来开发蓝牙应用程序: 1. GameKit :这是公开可用的框架。 但是使用它您只能在两个 iOS 设备之间建立和通信。 所以这个框架有其自身的局限性。 2