精华内容
下载资源
问答
  • iOS APP外设连接的学习研究

    千次阅读 2018-06-11 14:31:17
    iOS APP外设连接的学习研究一、iOS连接外设的几种方式iOS App连接外设的常用方式,可以分为三大类:通过网络端口,建立Socket使用TCP/IP协议进行通信,它主要有三种方式:wi-fi连接 优点是:简单,不需要集成MFi...

    iOS APP跟外设连接的学习研究

    一、iOS连接外设的几种方式

    iOS App连接外设的常用方式,可以分为三大类:

    • 通过网络端口,建立Socket使用TCP/IP协议进行通信,它主要有三种方式:

      1. wi-fi连接 优点是:简单,不需要集成MFi芯片。缺点:信号容易受到干扰,不太稳定,容易断开;如果硬件使用的场合没有公共wifi,就需要手机自建热点共享,硬件进行热点接入,操作步骤较多。
      2. USB热点共享 和WiFi连接类似,也不需要集成MFI芯片,区别就是USB线共享热点,走的是有线,不容易受到干扰,更稳定。
      3. NCM,就是把USB端口虚拟成标准的网络端口,然后手机和外设就能通过有线网络直连了。优点是:有线连接,非常稳定,带宽足够;也不依赖移动网络信号;但是它的缺点就是:需要集成MFI芯片并进行MFI认证

      关于如何使用Socket进行TCP、UDP连接,推荐github上的开源项目CocoaAsyncSocket https://github.com/robbiehanson/CocoaAsyncSocket

    • iOS App连接外部硬件的第二大类是EAP,全拼是External Accessory Protocol ,外部设备协议。这个是苹果推荐使用的外设连接方式。需要外设集成MFI芯片进行MFI认证。

    • 第三大类就是BLE,低功耗蓝牙,是iOS7.0以后才支持的连接方式。它的优点是不需要集成MFI芯片做认证,功耗低。缺点是:带宽很低,一般适合于只需要传输少量数据的场景。

    二、ExternalAccessory框架

    ExternalAccessory框架,就是可以用来和Lightning接口的硬件,或者蓝牙(2.1)设备进行连接、通讯的这么一个框架。该框架的主要功能,就是提供一个管道,让外围设备可以和基于iOS系统的设备进行通讯。

    1.下面是ExternalAccessory框架中主要类的介绍:

    • EAAccessory:表示你连接的设备。
    • EAAccessoryManager:有一个重要的属性connectedAccessories,用来获取已经连接上手机的设备。
    • EASession:这个类主要用来建立通道,让App和设备可以进行数据的传输(发送和接收)
    • EAWiFiUnconfiguredAccessory: 提供未配置的MFI Wireless Accessory Configuration设备的信息给App。
    • EAWiFiUnconfiguredAccessoryBrowser: 让App访问MFi Wireless Accessory Configuration进程。
    2.设备的连接
    设备的连接、断开,都是系统自动完成的。EAAccessoryManager类中有一个属性connectedAccessories(一个array),里面就已经包含了所有已经连接的外围设备(EAAccessory对象)。比如设备名称、制造厂商、硬件型号、固件型号等等信息,都可以在EAAccessory对象中拿得到。
    1.1 监听设备的断开和链接状态 — 注册通知
    调用EAAccessoryManager的方法registerForLocalNotifications。
    // 注册通告
    [[EAAccessoryManager sharedAccessoryManager] registerForLocalNotifications];
    
    // 监听EAAccessoryDidConnectNotification通告(有硬件连接就会回调Block)
    [[NSNotificationCenter defaultCenter] addObserverForName:EAAccessoryDidConnectNotification
                                                  object:nil
                                                   queue:nil
                                              usingBlock:^(NSNotification * _Nonnull note) {
    
                                                  // 从已经连接的外设中查找我们的设备(根据协议名称来查找)
    
    }];
    
    [[NSNotificationCenter defaultCenter] addObserverForName:EAAccessoryDidDisconnectNotification
                                                  object:nil
                                                   queue:nil
                                              usingBlock:^(NSNotification * _Nonnull note) {
                                                  // Do something what you want
    }];


    此外,除了注册通知,框架还提供了Delegate的回调方式,遵守EAAccessoryDelegate协议,并实现accessoryDidDisconnect:这个方法。

    1.2 识别硬件
    设备连接之后,需要通过「协议」来识别硬件的身份,协议本质上就是一个字符串,一个由反向域名组成的字符串,例如om.apple.myProtocol。而这个协议(字符串)的定义,是由硬件的生产厂商定义的,所以App开发人员,要和厂商沟通拿到这部分的资料。我们需要进行如下操作:
    1. #import <ExternalAccessory/ExternalAccessory.h>

    2. 使用UISupportedExternalAccessoryProtocols键在Info.plist中声明支持的协议,值为数组,数组的元素为支持的协议,元素的顺序任意且不限数量。 如下是官方文档中对UISupportedExternalAccessoryProtocols的介绍:

       UISupportedExternalAccessoryProtocols (Array - iOS) Specifies the protocols that your app supports and can use to communicate with external accessory hardware. Each item in the array is a string listing the name of a supported communications protocol. Your app can include any number of protocols in this list and the protocols can be in any order. The system does not use this list to determine which protocol your app should choose; it uses it only to determine if your app is capable of communicating with the accessory. It is up to your code to choose an appropriate communications protocol when it begins talking to the accessory.This key is supported in iOS 3.0 and later. For more information about communicating with external accessories, see External Accessory Programming Topics.

    3. 在delegate中遍历所有已经连接的设备

      - (void)accessoryDidConnect:(NSNotification *)notification{
      
          NSArray *connectedAccessories = [[EAAccessoryManager sharedAccessoryManager] connectedAccessories];
      
          for(EAAccessory *accessory in connectedAccessories){
      
              protocolString = accessory.protocolStrings;//协议
              manufacturer = accessory.manufacturer;//制造商
              name = accessory.name;//名字
              firmwareRevision = accessory.firmwareRevision;//固件型号
      
          }
      }

      或者在通告Block回调中,NSNotification * _Nonnull note这个参数,包含了EAAccessory对象,我们也可以直接通过EAAccessoryKey这个key拿到EAAccessory对象。

    1.3 传输数据

    创建EASession、打开输入、输出通道。 App和外围设备通讯、数据传输,靠的是NSInputStream和NSOutputStream对象,而这两个对象是EASession的两个属性。所以我们要创建EASession对象。

    - (BOOL)openSession {
        // 根据已经连接的EAAccessory对象和这个协议(反向域名字符串)来创建EASession对象,并打开输入、输出通道
        self.session = [[EASession alloc] initWithAccessory:self.accessory forProtocol:protocolString];
        if(self.session != nil) {
            // open input stream
            self.session.inputStream.delegate = self;
            [self.session.inputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
            [self.session.inputStream open];
            // open output stream
            self.session.outputStream.delegate = self;
            [self.session.outputStream scheduleInRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];
            [self.session.outputStream open];
        }
        else {
            NSLog(@"Failed to create session");
        }
        return (nil != self.session);
    
    }

    注意上面遵守的NSStreamDelegate协议,这里就是利用delegate回调来监听input stream和output stream的数据。

    - (void)stream:(NSStream *)aStream handleEvent:(NSStreamEvent)eventCode {
         switch (eventCode) {
             case NSStreamEventNone:
                 break;
             case NSStreamEventOpenCompleted:
                 break;
             case NSStreamEventHasBytesAvailable:
                 //NSLog(@"Input stream is ready");
                 // 接收到硬件数据了,根据指令定义对数据进行解析。
                 [self readFromDevice];
                 break;
             case NSStreamEventHasSpaceAvailable:
                 //NSLog(@"Output stream is ready");
                 // 可以发送数据给硬件了
                 [self writeToDevice];
                 break;
             case NSStreamEventErrorOccurred:
                 break;
             case NSStreamEventEndEncountered:
                 break;
             default:
                 break;
         }
     }

    • HasBytesAvailable:表示stream中有数据需要读取(硬件发送了数据给App)
    • HasSpaceAvailable:表示stream中可以接收数据的写入(App发送了数据给硬件)

    三、carplay

    苹果carplay官方文档  https://developer.apple.com/design/human-interface-guidelines/carplay/overview/introduction/ 目前只支持Audio Apps,Automaker Apps,Messaging and VoIP Apps三类APP,iOS 12会支持导航类APP。

    展开全文
  • iOS App连接外设的几种方式

    千次阅读 2016-11-08 17:36:24
    iOS App连接外设的几种方式

    iOS development

    一般iOS开发者做APP开发大部分时候都是通过Http(s)请求跟后台服务器打交道,做一些信息展示和用户交互。很少涉及到去跟外部硬件设备连接的开发。随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的app被开发出来,用来跟硬件设备进行来连接,获取硬件相关信息展示或者发送指令控制硬件来提供服务。故本文就针对iOS的app如何跟外部设备进行连接通信这个问题跟大家交流一下,如有不正确的地方恳请各位看官指正。本文原创,欢迎转载,转载请注明出处。

    iOS App连接外设的几种方式

    如上图所示,我把iOS App连接外设的常用方式总结了一下,可以分为三大类:

    iOS App连接外部硬件方式第一类是通过网络端口

    建立Socket使用TCP/IP协议族进行通信,天然支持多通道,想要几个通道就建几个socket就行了。它主要有三种方式,第一种方式是Wi-Fi连接,优点是:简单,不需要集成MFi芯片,只要对应的硬件有无线网卡,然后手机和硬件连接到同一个局域网中就可以使用socket通过网络协议通信了。缺点也很明显:(1)无线连接信号容易受到干扰,不太稳定,容易断开;(2)如果硬件使用的场合没有公共wifi,就需要手机自建热点共享,硬件进行热点接入,操作步骤较多,对用户来说学习使用成本较高,并且热点共享要求手机本身的数据移动网络是稳定的,在没有移动数据网络信号的地方,热点无法建立。

    使用网络端口的第二种方式是USB热点共享,这个其实跟Wi-Fi中的热点共享非常类似,也不需要集成MFI芯片,区别就是USB线共享热点,走的是有线,不容易受到干扰,更稳定,而且iPhone可以边使用可以边充电;缺点也是操作步骤比较复杂,需要先打开个人热点共享;

    使用网络端口的第三种方式是NCM,就是把USB端口虚拟成标准的网络端口,然后手机和外设就能通过有线网络直连了,可以理解成手机和外设通过一跟网线连起来了,然后就可以用socket通过TCP,UDP进行通信了。它的优点是:有线连接,非常稳定,带宽足够;也不依赖移动网络信号;但是它的缺点就是:需要集成MFI芯片并进行MFI认证,有一定门槛。更变态的是这么好的一种方式,苹果只允许它自己的CarPlay使用,如果硬件使用NCM跟其他app通信,是不能通过MFI认证的。

    关于如何使用Socket进行TCP、UDP连接,推荐github上的开源项目CocoaAsyncSocket

    iOS App连接外部硬件方式的第二大类是EAP

    EAP全拼是External Accessory Protocol ,外部设备协议。这个是苹果推荐使用的外设连接方式。需要外设集成MFI芯片进行MFI认证。手机端开发相对简单,只要集成iOS系统提供的一个框架ExternalAccessory.framework,并且在info.plist中配置好协议字符串(Supported external accessory protocols),当iOS 设备通过USB线或者蓝牙连接到对应硬件时,iOS系统会把符合MFI认证要求的外设抽象成了一个流对象,App通过指定的协议字符串来创建一个EASession类的实例来访问到该流对象,就能通过NSInputStream和NSOutputStream跟硬件件进行通信了。它有两种模式,一种是叫EASession的模式,它带宽相对较低,但是允许同时通过多个协议字符串创建多个会话,也就是说直接支持多个通道;另外一种是Native Transport的模式,这种模式的优点是带宽足够大,理论值是100MB以上,但是不支持多通道,如果业务层需要支持多数据通道的话需要App自己进行通道的复用与拆分,并且Native Transport需要iPhone工作在USB host模式,硬件需要支持USB 模式切换。

    关于如何使用EAP跟外部设备进行通信,可以参考苹果官方的demo进行入门和学习。

    iOS App连接外部硬件方式的第三大类就是BLE

    BLE即低功耗蓝牙,是iOS7.0以后才支持的连接方式。它的优点是不需要集成MFI芯片做认证,功耗低,手机端开发也相对简单,集成iOS系统提供的CoreBluetooth.framework就行。缺点是:带宽很低,一般适合于只需要传输少量数据的场景。比如前两年非常火爆的各种所谓智能硬件,像智能水杯,智能体重计,运动手环等,都是采用这种连接方式。

    关于如何使用BLE进行硬件连接,可以参考本人在github的一个小开源项目(https://github.com/luoxubin/BlueTooth4.0)。另外本人自己业余时间也做过一个BLE连接外设的App-裤宝(名字有创意吧,裤子里的宝贝,是跟我另外两个小伙伴一起做的创业项目,目前该项目黄了, 不过app还在线上,AppStore里搜索“裤宝”可以下载到

    总结一下,图中带MFI字样的表示该连接方式需要硬件集成MFi芯片,做MFi认证。关于苹果的MFI认证,对iOS开发中来说其实是一个比较陌生并且繁琐的topic,原因如下:

    (1)网上鲜有资料,Google基本上查不到。 因为MFi认证是由硬件生产商主导进行的,苹果首先对硬件生产商的实力(质量,信誉,生产规模)有很苛刻的要求,满足要求的才有进行MFI认证的资格。满足MFi认证资格要求的硬件生产商,提交了MFi产品计划后才能得到苹果MFi开发的官方文档,这个文档是带水印的,不允许外泄;

    (2)MFi认证周期很长,过程也很复杂;

    (3)苹果官方沟通渠道很窄,电话打不通,邮件回复不及时。

    后面我计划找时间写一篇文章专门介绍本人关于MFI认证的一些经验和感想,有兴趣的可以关注我的微信公众号:云峰雾阁。谢谢大家宝贵时间阅读此文。

    http://www.toutiao.com/i6314562449295016450/?group_id=6312036206315028737&group_flags=0

    展开全文
  • iOS App如何连接外设

    2016-09-20 19:00:00
    如上图所示,我把iOS App连接外设的常用方式总结了一下,可以分为三大类: iOS App连接外部硬件方式第一类是通过网络端口 建立Socket使用TCP/IP协议族进行通信,天然支持多通道,想要几个通道就建几个socket...

          一般iOS开发者做APP开发大部分时候都是通过Http(s)请求跟后台服务器打交道,做一些信息展示和用户交互。很少涉及到去跟外部硬件设备连接的开 发。随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的app被开发出来,用来跟硬件设备进行来连接,获取硬件相关信息展示或者 发送指令控制硬件来提供服务。故本文就针对iOS的app如何跟外部设备进行连接通信这个问题跟大家交流一下,如有不正确的地方恳请各位看官指正。本文原 创,欢迎转载,转载请注明出处。

    1240

    如上图所示,我把iOS App连接外设的常用方式总结了一下,可以分为三大类:

    iOS App连接外部硬件方式第一类是通过网络端口

    建立Socket使用TCP/IP协议族进行通信,天然支持多通道,想要几个通道就建几个socket就行了。它主要有三种方式,第一种方式是Wi-Fi连接, 优点是:简单,不需要集成MFi芯片,只要对应的硬件有无线网卡,然后手机和硬件连接到同一个局域网中就可以使用socket通过网络协议通信了。缺点也 很明显:(1)无线连接信号容易受到干扰,不太稳定,容易断开;(2)如果硬件使用的场合没有公共wifi,就需要手机自建热点共享,硬件进行热点接入, 操作步骤较多,对用户来说学习使用成本较高,并且热点共享要求手机本身的数据移动网络是稳定的,在没有移动数据网络信号的地方,热点无法建立。

    使用网络端口的第二种方式是USB热点共享,这个其实跟Wi-Fi中的热点共享非常类似,也不需要集成MFI芯片,区别就是USB线共享热点,走的是有线,不容易受到干扰,更稳定,而且iPhone可以边使用可以边充电;缺点也是操作步骤比较复杂,需要先打开个人热点共享;

    使用网络端口的第三种方式是NCM, 就是把USB端口虚拟成标准的网络端口,然后手机和外设就能通过有线网络直连了,可以理解成手机和外设通过一跟网线连起来了,然后就可以用socket通 过TCP,UDP进行通信了。它的优点是:有线连接,非常稳定,带宽足够;也不依赖移动网络信号;但是它的缺点就是:需要集成MFI芯片并进行MFI认 证,有一定门槛。更变态的是这么好的一种方式,苹果只允许它自己的CarPlay使用,如果硬件使用NCM跟其他app通信,是不能通过MFI认证的。

    关于如何使用Socket进行TCP、UDP连接,推荐github上的开源项目CocoaAsyncSocket

    iOS App连接外部硬件方式的第二大类是EAP

    EAP全拼是External Accessory Protocol ,外部设备协议。这个是苹果推荐使用的外设连接方式。需要外设集成MFI芯片进行MFI认证。手机端开发相对简单,只要集成iOS系统提供的一个框架ExternalAccessory.framework,并且在info.plist中配置 好协议字符串(Supported external accessory protocols),当iOS 设备通过USB线或者蓝牙连接到对应硬件时,iOS系统会把符合MFI认证要求的外设抽象成了一个流对象,App通过指定的协议字符串来创建一个 EASession类的实例来访问到该流对象,就能通过NSInputStream和NSOutputStream跟硬件件进行通信了。它有两种模式,一 种是叫EASession的模式,它带宽相对较低,但是允许同时通过多个协议字符串创建多个会话,也就是说直接支持多个通道;另外一种是Native Transport的模式,这种模式的优点是带宽足够大,理论值是100MB以上,但是不支持多通道,如果业务层需要支持多数据通道的话需要App自己进 行通道的复用与拆分,并且Native Transport需要iPhone工作在USB host模式,硬件需要支持USB 模式切换。

    关于如何使用EAP跟外部设备进行通信,可以参考苹果官方的demo进行入门和学习。

    iOS App连接外部硬件方式的第三大类就是BLE

    BLE 即低功耗蓝牙,是iOS7.0以后才支持的连接方式。它的优点是不需要集成MFI芯片做认证,功耗低,手机端开发也相对简单,集成iOS系统提供的 CoreBluetooth.framework就行。缺点是:带宽很低,一般适合于只需要传输少量数据的场景。比如前两年非常火爆的各种所谓智能硬件, 像智能水杯,智能体重计,运动手环等,都是采用这种连接方式。

    总结一下,图中带MFI字样的表示该连接方式需要硬件集成MFi芯片,做MFi认证。关于苹果的MFI认证,对iOS开发中来说其实是一个比较陌生并且繁琐的topic,原因如下:

    (1) 网上鲜有资料,Google基本上查不到。 因为MFi认证是由硬件生产商主导进行的,苹果首先对硬件生产商的实力(质量,信誉,生产规模)有很苛刻的要求,满足要求的才有进行MFI认证的资格。满 足MFi认证资格要求的硬件生产商,提交了MFi产品计划后才能得到苹果MFi开发的官方文档,这个文档是带水印的,不允许外泄;

    (2)MFi认证周期很长,过程也很复杂;

    (3)苹果官方沟通渠道很窄,电话打不通,邮件回复不及时。

    转载于:https://my.oschina.net/linweida/blog/749318

    展开全文
  • 苹果手机可以作为蓝牙外设端,被蓝牙中央端来扫描连接交互数据,实现模拟蓝牙外设硬件。通过阅读CoreBluetooth库,可以找到一个CBPeripheralManager的类,该类主要的作用就是允许你来管理发布services,把这些...
    苹果手机可以作为蓝牙外设端,被蓝牙中央端来扫描连接交互数据,实现模拟蓝牙外设硬件。通过阅读CoreBluetooth库,可以找到一个CBPeripheralManager的类,该类主要的作用就是允许你来管理发布services,把这些services广告给其他的设备。如果想详细了解该类的属性和方法,建议去看看CoreBluetooth/CBPeripheralManager.h。
    下面来模拟一个简单的蓝牙外设端。
    准备工作
    CBUUID *serviceUUID;
    CBUUID *characteristicUUID;
    NSData *characteristicValue;
    NSString *localName;
    NSArray *serviceUUIDs;
    
    上面中,serviceUUID为给外设配置的服务的UUID,可以有多个,characteristicUUID为给service添加的特征的UUID,也可以有多个,可自定义可读可写等等属性.characteristicValue为characteristic的值,localName和serviceUUIDs分别为键CBAdvertisementDataLocalNameKey和CBAdvertisementDataServiceUUIDsKey对应的value。由于作为外设端时发送广播包,广播包中提供包含着两个键值对,如果有另外的键值对想要发送,例如CBAdvertisementDataServiceDataKey,会出现错误。
    开始
    首先要导入蓝牙库
    #import <CoreBluetooth/CoreBluetooth.h>
    遵守协议
     @interface viewController()<CBPeripheralManagerDelegate>
    
    创建peripheralManager对象
    self.peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil];//nil表示在主线程中执行。
    
    创建了peripheralManager对象后会自动调用回调方法didUpdateState
    - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral {
    if (peripheral.state != CBPeripheralManagerStatePowerOn) {
    return;
    }
    }
    给外设配置服务和特征
    - (void)configServiceAndCharacteristicForPeripheral {
    CBMutableCharacteristic *writeReadCharacteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyWrite | CBCharacteristicPropertyRead value:nil permissions:CBAttributePermissionsReadEncryptionRequired | CBAttributePermissionsWriteEncryptionRequired];
    CBMutableService *service = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];
    [service setCharacteristics:@[writeReadCharacteristic]];
    [self.peripheralManager addService:service];
    }
    调用上面的方法时,会监听didAddService:
    - (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error {
    }
    开始广播
    [self.peripheralManager startAdvertising:@{CBAdvertisementDataServiceUUIDsKey:serviceUUIDs,CBAdvertisementDataNameKey:localName}];
    
    调用上 面方法时,会监听DidStartAdvertising:
    - (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error {
    }
    当中央端连接上了此设备并订阅了特征时会回调 didSubscribeToCharacteristic:
    - (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didSubscribeToCharacteristic:(CBCharacteristic *)characteristic {
    [self.peripheralManager updateValue:characteristicValue forCharacteristic:characteristic onSubscribedCentrals:nil];
    }
    当中央端取消订阅时会调用didUnsubscribeFromCharacteristic:
    - (void)peripheralManager:(CBPeripheralManager *)peripheral central:(CBCentral *)central didUnsubscribeFromCharacteristic:(CBCharacteristic *)characteristic {
    }
    当接收到中央端读的请求时会调用didReceiveReadRequest:
    - (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request {
    if (request.characteristic.properties & CBCharacteristicPropertyRead) {
    NSData *data = request.characteristic.value;
    [request setValue:data];
    [self.peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];
    } else {
    [self.peripheralManager respondToRequest:request withResult:CBATTErrorReadNotPermitted];
    }
    }
    当接收到中央端写的请求时会调用didReceiveWriteRequest:
    - (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray<CBATTRequest *> *)requests {
    CBATTRequest *request = requests[0];
    if (request.characteristic.properties & CBCharacteristicPropertyWrite) {
    CBMutableCharacteristic *c = (CBMutableCharacteristic *)request.characteristic;
    c.value = request.value;
    [self.peripheralManager respondToRequest:request withResult:CBATTErrorSuccess];
    } else {
    [self.peripheralManager respondToRequest:request withResult:CBATTErrorWriteNotPermitted];
    }
    }
    手机app可以作为一个蓝牙外设端来模拟外设硬件,但广播包里的数据只能包含localName和serviceUUID,相对于外设硬件来说还是有一些不足之处。

     

    转载于:https://www.cnblogs.com/Free-Thinker/p/11213863.html

    展开全文
  • APP当作蓝牙中心,连接其他的蓝牙外设时,首次连接成功过后,iOS系统内会将改外设记录下来,下次搜索时,搜索到的蓝牙外设时,直接打印peripheral.name,得到的会被记录下的蓝牙名称,如果此期间蓝牙外设有更新蓝牙...
  • iOS App 连接外设的几种方式

    万次阅读 2017-05-31 18:00:10
    原创作者: Max_Marry ... 随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的 App 被用来跟硬件设备进行来连接,获取...iOS App 连接外设的常用方式可以分为三大类: 网络端口 建立 Soc
  • android蓝牙app连接外设时崩溃问题

    千次阅读 2018-09-18 13:57:15
    连接蓝牙设备的app在连接时,如遇到蓝牙设备的信号名称错误或蓝牙设备关闭时,app有一定概率出现程序闪退; 经查证原因出现在接收蓝牙信号的广播的地方,原代码如下: public BroadcastReceiver mReceiver = new ...
  • ios设备app作为蓝牙外设
  • 随着近年来车联网和物联网的兴起,智能家居和智能硬件的逐步火热,越来越多的 App 被开发出来,用来跟硬件设备进行来连接,获取硬件相关信息展示或者发送指令控制硬件来提供服务。本文就针对 iOS 的 App 如何跟外部...
  • ios蓝牙开发(三)app作为外设被连接的实现 再上一节说了app作为central连接peripheral的情况,这一节介绍如何使用app发布一个peripheral,给其他的central连接 还是这张图,central模式用的都是左边的...
  • iOS 蓝牙开发(三)app作为外设被连接的实现 再上一节说了app作为central连接peripheral的情况,这一节介绍如何使用app发布一个peripheral,给其他的central连接 还是这张图,central模式用的都是...
  • BLE 蓝牙 与APP 得交互 内设 外设

    千次阅读 2016-11-26 10:07:36
    这两组api粉笔对应不同的业务常见:左侧叫中心模式,就是以你的app作为中心,连接其他的外设的场景;而右侧称为外设模式,使用`手机作为外设`连接其他中心设备操作的场景 服务和特征(service andcharacteristic)  ...
  • 再上一节说了app作为central连接peripheral的情况,这一节介绍如何使用app发布一个peripheral,给其他的central连接 还是这张图,central模式用的都是左边的类,而peripheral模式用的是右边的类 peripheral...
  • 在上一节说了app作为central连接peripheral的情况,这一节介绍如何使用app发布一个peripheral,给其他的central连接。 还是这张图,central模式用的都是左边的类,而peripheral模式用的是右边的类 ...
  • 今天小编就将为大家分享一篇iOS大牛写的有关蓝牙开发中,使用app发布一个peripheral,给其他的central连接的实现方法。    上面这张图是什么意思呢,相信开发过蓝牙项目的童鞋应该都清楚,central模式用的...
  • S1 Communication Layer specifications   1. Purpose of This Document 4 2. General abbreviations & habits 4 2.1 General abbreviations 4 ...7.5.2 Band requests APP OTA packet (IV) ...
  • 3 蓝牙外设 实现步骤 1. 打开peripheralManager,设置peripheralManager的委托 设置当前ViewController实现CBPeripheralManagerDelegate委托 @interface BePeripheralViewController : ...
  • 根据公司对蓝牙BLE通信时间的进一步缩短要求,我们开始了从设备广播间隙和连接范围间隙的最大最小值下手了。...得出结论:iOS App作为从设备时不能设置广播间隙和连接间隙。经测试广播间隙默认大致30ms。
  • 在Android系统中编写APP通过应用程序框架层访问硬件服务 。  学习完这六篇文章,相信大家对Android系统就会有一个更深刻的认识了,敬请关注。  撇开这些争论,学习Android硬件抽象层,对理解...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,613
精华内容 3,445
关键字:

外设app