课程表

HomeKit课程

工具箱
速查手册

创建Home布局

当前位置:免费教程 » 移动开发 » HomeKit

HomeKit 允许用户创建一个或者多个Home布局。每个Home(HMHome)代表一个有网络设备的住所。用户拥有Home的数据并可通过自己的任何一台iOS设备进行访问。用户也可以和客户共享一个Home,但是客户的权限会有更多限制。被指定为primary home的home默认是Siri指令的对象,并且不能指定home。

每个Home一般有多个room,并且每个room一般会有多个智能配件。在home(HMHome) 中,每个房间是独立的room,并具有一个有意义的名字,例如“卧室”或者“厨房”,这些名字可以在Siri 命令中使用。一个accessory(HMAccessory)代表实际家庭中的自动化设备,例如车库开门器。一个sevice(HMService)是accessory提供的?种实际服务,例如打开或者关闭车库,或者车库上的灯。

homes_2x.png

如果你的app 缓存了home布局的信息,那么当其布局发声改变的时候,app就需要更新这些信息。使用HMHomeManager对象可以从HomeKit数据库获取HMHome和其他相关的对象。本章描述的API获取对象后,你应该通过代理回调函数保持获取对象和HomeKit数据库同步,具体描述请参看“Observing HomeKit Database Changes".

创建 Home Manager对象
使用Home Manager—一个HMHomeManager对象的访问home、room、配件、服务以及其他HomeKit对象。在创建家庭对象管理器(home manager)之后,直接设置它的代理,以便获取到这些对象之后及时的通知到你。

  1. self.homeManager = [[HMHomeManager alloc] init];
  2. self.homeManager.delegate = self;

当你创建一个home manager对象时,HomeKit就开始从HomeKit数据库获取这些homes和相关对象,例如room和accessory对象。当HomeKit正在获取那些对象时,home manager 的primaryHome属性是nil,并且homes属性是个空数组。你的app应该处理用户还没有完成创建home的情况,但是app应该等待直到HomeKit完成初始化。当获取对象完成之后,HomeKit 会发送homeManagerDidUpdateHomes:消息给home manager的代理。

注意:当app进入前台或者在后台Home manager属性发生改变时,这个homeManagerDidUpdateHomes:方法就会被调用,详情请参阅“Observing Changes to the Collection of Homes”。

获取Primary Home和 Homes集合
通过home manager的primaryHome属性,可以得到primary home,代码如下:

  1. HMHome *home = self.homeManager.primaryHome;

使用home manager的homes属性可以得到用户的所有home的集合;例如自家主要居所、度假别墅以及办公室。每个home都对应一个独立的home对象。

  1. HMHome *home;
  2. for(home in self.homeManager.homes ){
  3. …}

获取 Home中的所有room
在一个home中,rooms属性定义accessories的物理位置。用home的rooms属性可以枚举home中的所room。

  1. HMHome *home = self.homeManager.primaryHome;
  2. HMRome *room;
  3. for(room in home.rooms){
  4. }

获取Room 中的Accessories
Accessories 数组属于home,但是被指定给了home中的room。假如用户没有给一个accessory指定room,那么这个accessories被指定一个默认的room ,这个room是roomForEntireHome方法的返回值。用room的accessories属性可以枚举room中所有的accessory。代码如下:

  1. HMAccessory *accessory;
  2. for(accessory in room.accessories){
  3. }

如果你要展示一个个accessory的相关信息或者允许用户控制它,可设置accessory的代理方法并实现这个代理方法,详情请见“Observing Changes to Accessories”.
一旦你获取到一个accessory对象,你就可以访问它的服务和对象,详情请参阅“Accessing Services and Characteristics”。

获取Home中的Accessories属性
使用HMHome类中的accessories的方法,可以直接从Home对象中获取所有的accessory对象,而不用枚举home中的所有room对象(详情请见“Getting the Accessories in a Room”。

转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号