本帖最后由 lb8820265 于 2016-10-29 10:40 编辑
先上效果图:
图中让SensorTile靠近盛着热水杯子,如果温度高于30摄氏度,那么APP界面就显示为红色,低于等于30就显示透明。
这个DIY主要是展示如何获取传感器数值,SDK-Example显示出来的都是字符串,无法进行数学运算,转换也很麻烦,不过SDK中各个Feature都提供了获取传感器数值的API,这里就以获取温度的API为例来介绍下。
用AS打开SDK,在FeatureListActivity类中找到onUpdate函数,仿照之前做的DIY遥控LED灯,在函数中添加如下函数:
- if(f.getName().equals("Temperature")){//if the Feature is Temperature
- FeatureTemperature Temperature = mNode.getFeature(FeatureTemperature.class);
- final float Temp = Temperature.getTemperature(sample);//get temperature
- //System.out.println(Temp);//print the temperature
- FeatureListActivity.this.runOnUiThread(new Runnable() {//change color in the UI thread
- @Override
- public void run() {
- if (Temp > 30) {//if the temperature is greater than 30 degree centigrade
- mFeatureList.setBackgroundColor(Color.argb(255, 255, 0, 0));//change the background to red
- } else {
- mFeatureList.setBackgroundColor(Color.argb(0, 0, 0, 0));//change the background to transprent
- }
- }
- });
- }
复制代码 程序都写好了注释,首先判断需要更新的Feature是不是Temperature,然后获取Temperature的类,然后定义一个final类型的变量Temp,注意这里一定要用final类型,不然在UI线程中报错。然后可以采用System.out.println输出到AS上的logcat,接下来就在UI线程中判断变量Temp是否大于30度,大于就将整个ListView背景变为红色,否则变为透明。好啦,所有代码写完了,整个功能实现就这一段,不需要再在其他地方添加了。
使用时要注意,需要先点击Feature列表中的Temperature,这样就Notification了Temperature,否则APP不会接收温度信息。
这个DIY演示了SKD中类似getXX(Samplesample)函数的用法,为以后更加复杂的应用打好基础。
补充说明:所有的代码都进行了版本的管理,在APP中体现在设备搜索界面的状态栏上,被收缩了,点击后可以会显示出版本号,在menu_scan.xml中添加如下代码:
- <item
- android:orderInCategory="2"
- android:title="V1.0.2"
- app:showAsAction="never"/>
复制代码 之前有V1.0.0、V1.0.1,现在到了V1.0.2。在github中用Tag对不同的版本进行区分,可以下载任何一个Tag下的版本。同时在github的README.md进行了功能介绍,描述了各个版本修改的内容以及修改时间。