第2部分:背景监测
上一章弄好的android studio和集成了Estimote SDK,现在开始学习第一特性,监控beacons和beacons在等待时间中等待用户进来。
目录
1、什么是beacons监控
2、beacons区域
3、添加beacons管理
4、开始监控
5、显示进入通知
6、测试监视 开关休眠
7、重点回顾
什么是beacons监控
你可以认为信标监测作为一个区域,一个通常使用一组地理坐标定义的虚拟障碍物,移动到该区域在发生进入和离开事件的时候,此应用会作出反应。
在一个有很多beacons的案例中,很多beacons覆盖着一大片面积。这相比一个beacons的范围,以后者为基础混合的多个beacons范围的wifi和gps,但是对于这些beacons,触发的离开和进入事件只有30秒。
在Estimote Android SDK中,你可以使用beaconmanager中的setbackgroundscanperiod设置扫描,默认是25秒一次扫描,你也可以设置更短,但是相对手机电量会消耗。
beacons地区
如何规定beacons的使用区域?beacons的区域是一个概念的东西,在你使用Estimote Android SDK时候,你要注意以下:
UUID 一个常量字符串 如 b9407f30-f5f8-466e-aff9-25556b57fe6d
major number 一个无符号短整型,即一个整数,从1到65535不等,(0是一个保留值)
minor number 也是一个无符号的短整型 主要是数字
对于一个beacons地区 ,你可以只需要uuid和一个major number或者你可以更具体点增加minor number来混搭,你也可以只使用uuid,你也可以超级模糊的跳过uuid,这将会是得到所有的beacons。这些都是选择,
UUID + major + minor, UUID + major,uuid,什么都没有
当跨越多个beacons区域的时候,当检测匹配到第一个beacons时候,会有一个进入的事件和一个退出事件,直到没有匹配的beacons;当然你也可以创建一个beacons,监听它的进入退出事件。
添加一个beacons管理
要监测beacons,首先我们要创建beaconmanager,它将管理着所有的beacons。
预计在应用程序任何时候都要检测所有的beacons,无论是进行着哪一个活动。在android的Application中定义一个beaconmanager,刚刚好满足这个需求。
创建一个MyApplication
package com.example.airport;
import android.app.Application;
import com.estimote.sdk.BeaconManager;
public class MyApplication extends Application
{
private BeaconManager beaconManager;
@Override
public void onCreate()
{
super.onCreate();
beaconManager=new BeaconManager(getApplicationContext());
}
}
然后在AndroidManifest.xml更改Application
<application
<!-- add this: -->
android:name=".MyApplication"
<!-- the rest of the file follows -->
android:allowBackup="true"
启动监控
下一步我们将创建一个用于我们监测的beacons区域,下面教程,我们将会放置一个单一的beacons.但是它相对于beacons系统来是很简易的,beacons可以设置major或者minor或者两个都有或者是null(这些我们可以以后在做)
继续我们的MyApplication
beaconManager=newBeaconManager(getApplicationContext());// add this below:
beaconManager.connect(newBeaconManager.ServiceReadyCallback()
{
@Override
public void onServiceReady()
{
beaconManager.startMonitoring(new Region(
"monitored region",
UUID.fromString("B9407F30-F5F8-466E-AFF9-25556B57FE6D"),
22504,48827));
}
});
你添加这些代码,来添加uuid和major和minor的值和一个你的beacons。最简单的方法是去邮箱哪里复制beacons的对应信息。
默认beacons是在购买的邮箱上,你可以通过下面的指南来转移你的beacons
到别的邮箱。
另一个选择是在你的Estimote app中通过雷达的方式找到你的beacons,他会返回beacons的试图,包含它的uuid和major和minor
如果周边有很多的beacons,会以一个列表的方式代替beacons详情视图,由近到远的方式排列。所以你距离近的那一个应该会出现在列表top。
You can switch to the “List” view using the tab bar at the bottom of the “Beacons in range” screen.//不会翻译
显示进入通知
在一定的时间中做的动作,我们来添加一个通知,表示用户进入beacons的范围。
首先我们在MyApplication添加一个辅助方法
public void showNotification(String title,String message)
{
Intent notifyIntent=new Intent(this,MainActivity.class);
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
PendingIntent pendingIntent=PendingIntent.getActivities(this,0,new Intent[]{notifyIntent},PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification=new Notification.Builder(this).setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle(title)
.setContentText(message)
.setAutoCancel(true)
.setContentIntent(pendingIntent)
.build();
notification.defaults|=Notification.DEFAULT_SOUND;
NotificationManager notificationManager=(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);notificationManager.notify(1,notification);
}
现在我们获取一个简单的字符信息
// find this line:
beaconManager=new BeaconManager(getApplicationContext());
// add this below:
beaconManager.setMonitoringListener(newBeaconManager.MonitoringListener(){
@Override
public void onEnteredRegion(Region region,List<Beacon>list){
showNotification("Your gate closes in 47 minutes.","Current security wait time is 15 minutes, "+"and it's a 5 minute walk from security to the gate. "+"Looks like you've got plenty of time!");
}
@Override
public void onExitedRegion(Region region)
{
// could add an "exit" notification too if you want (-:
}
});
测试监控 flip to sleep
运行你的应用到你的app上,当你到Beacon范围内的时候,进入事件立即触发.
但是不能每一次都进入退出出发对应的事件。
所以还有一种模式 Beacon休眠
1、打开你的app找到你的Beacon列表,点击其中一个Beacon
2、如果你没有登录会要求你登陆,这是作为一个安全证书,你要到你的邮箱设置你的app权限
3、查看剩余电池寿命
4、找到Flip to Sleep Mode,并设置它
5、回到列表,断开Beacon连接。
一旦离开Beacon范围还要30秒才能反应过来。这是不可改的