博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(30 gadget day 6) 主人,早上好 - iBeacon
阅读量:5834 次
发布时间:2019-06-18

本文共 2738 字,大约阅读时间需要 9 分钟。

咳咳,今天遍寻各处都想不到写个啥。于是只能假装我没玩过这个“新鲜”的gadget啦——iBeacon!

问候

办公室人少,每次去的时候都略显孤单。于是决定写一个跟自己打招呼的玩意儿,让我每次进门的时候都能收到一个“亲切的问候”,比如。

图片描述

iBeacon with Web

据说微信的JS SDK要开放iBeacon的部分了。所以嘛,先prototype一下咋用js来玩ibeacon。我先猜测下哈,微信的SDK是估计是把native的ibeacon数据通过微信转换以后bridge进H5应用里,也就是假设某个ibeacon对应的是吉野家某个门店的大门口,然后用户无论通过何种入口(摇一摇,扫二维码等),进入了一个开发者设定的H5页面里。在这个页面通过类似wx.beacons接口拿到了周围的ibeacon数据。这种数据应该是某个url,某个商家,某个门店,某个位置这样的,而不是类似UUID,major,minor这样的标准ibeacon id。

我想做的更简单一点。native app拿ibeacon数据,把数据同步给服务器,服务器确定是否要触发事件,如果需要则发给H5应用。这样的问题就是,要总连着网。so what,嗯。

iBeacon检测

家里的Estimote iBeacon都没了,只能用不熟悉的Kontakt的啦!他们长这样。

图片描述

去官网看,跳到Android的GetStart,直接搜“download”,果断看到“Go to the Kontakt.io Android SDK 1.0.5 on GitHub”,看到两个jar,直觉都当下来,回来看文档,都拷进去就好。

然后肯定就是加Permission啦,文档搜一搜,发现相比Estimote,Kontakt对权限分的更细一些,如果你不用他的云服务就不用加Internet权限。还有不大明白为啥针对萝莉炮要再加个Service,这都不能检测下么。

然后就是看具体啦。无非也就是创建个BeaconManager,收各种回调哈。

beaconManager = BeaconManager.newInstance(this);        beaconManager.setMonitorPeriod(MonitorPeriod.MINIMAL);        beaconManager.setForceScanConfiguration(ForceScanConfiguration.DEFAULT);        beaconManager.registerMonitoringListener(new BeaconManager.MonitoringListener() {            @Override            public void onMonitorStart() {}            @Override            public void onMonitorStop() {}            @Override            public void onBeaconsUpdated(final Region region, final List
beacons) {} @Override public void onBeaconAppeared(final Region region, final Beacon beacon) {}

这里文档有点问题,新的1.0.5的SDK里已经不是Beacon这个类而变成BeaconDevice了。connect函数里也有不一致的地方。startMonitoring的参数要清空就好了。不然就自己弄个Set,找个Everywhere的Region装进去。

private void connect() {        try {            beaconManager.connect(new OnServiceBoundListener() {                @Override                public void onServiceBound() {                    try {                        beaconManager.startMonitoring();                    } catch (RemoteException e) {                        e.printStackTrace();                    }                }            });        } catch (RemoteException e) {            throw new IllegalStateException(e);        }    }

数据中心

我一直希望把自己的各种数据尽量实时的扔到云里去,这样几十年以后就能知道现在的我是怎么活的啦。这里我也不希望搞个啥local server之类的,直接上云服务吧。以前介绍过就是个和类似的实时数据库。客户端和服务器端可以用超高抽象的handler来操纵数据。

这次我用PubNub来实现。GetStart就跳过了。看名字就知道这玩意儿是在做PubSub类似的技术。所以程序也很简单,一端Pub一端Sub。既然是手机端发现iBeacon那肯定是手机端来Pub喽。服务端就把事先知道的iBeacon都Sub上就好了。channel就用每个beacon的uuid:major:minor合起来hash一下哈。

Pubnub pubnub = new Pubnub("xxyyzz", "status");try {  pubnub.subscribe("hello_world", new Callback() {...// 也可以直接抄一下昨天hue的api body,挺像的pubnub.publish("xxyyzz", "{\"status\":\"on\"}" , callback);

我来啦~

前端页面引入PubNub的库,每个设备都显示自己对应的页面,然后就Sub着就好啦。一旦有消息进来,就根据status选择性display那张图哈。

困死了困死了>.<

另外,求各种带API的硬件Gadget...库存快枯竭了...

EOF

转载地址:http://gjycx.baihongyu.com/

你可能感兴趣的文章
bug
查看>>
Unable to find the binary installation directory
查看>>
微信小程序POST方式提交
查看>>
Redis学习笔记4--持久化机制与分区
查看>>
uva 340 - Master-Mind Hints
查看>>
Maven常用命令
查看>>
Linux基础篇和服务器篇教程
查看>>
CentOS 7.2 下 yum 安装 mysql 5.7
查看>>
备忘录
查看>>
自签数字证书
查看>>
关于重载属性导致的crash
查看>>
iOS开发5:UISlider与UISwitch控件
查看>>
logback.xml for spring boot
查看>>
py知识积累 类型判断
查看>>
C# async & await 个人实用
查看>>
[M0] 一些宏开关功能
查看>>
elasticsearch6.1.1的head插件安装
查看>>
instanceof, isinstance,isAssignableFrom的区别
查看>>
iOS系统安全机制概览
查看>>
su 与 sudo 的差异
查看>>