当前位置: 首页 > news >正文

Windows 8 应用商店应用开发 之 氛围光传感器

 

接下来的一段时间里面,我们将对“Windows 8 应用商店应用开发”中的传感器开发进行一个系列的讲解,传感器作为Windows 8 应用开发当中与以往技术开发相差比较大而很少被博友们谈论,但是他们确实移动应用开发当中最最重要的技术,本系列将会以如何使用为主要目标,而不是炫耀开发出多么漂亮的应用为目标进行讲解。大家可将这些传感器的使用方法集合到应用当中。今天是第一讲氛围光传感器取值。

氛围光传感器能检测设备周围的照明变化,这种传感器返回以勒克斯为照明单位的数据。根据氛围光传感器获得的数据能动态的改变屏幕的明亮程度,这样既可以节省电量有又能增加用户观看屏幕的舒适度。下面是通过一个示例程序介绍如何使用氛围光传感器响应设备环境光的变化。

新建一个名字为“LightSensorExample”的Windows应用商店的空白应用程序项目,在MainPage.xaml文件的Grid元素中添加如下代码。

<TextBlock Text="获取氛围光数据" Height="40" FontSize="20" Margin="40,14,1175,714"/>

<Button  Name="GetDataButton" Content="获取" Click="GetData_Click" Margin="40,96,0,634"/>

<Button  Name="Closebutton" Content="停止"  Click="CloseData_Click" Margin="127,96,0,634" RenderTransformOrigin="0.797,0.421"/>

<TextBlock Text="数据"  FontSize="18" Margin="40,59,1262,677"/>

<TextBlock x:Name="ScenarioOutput_LUX"  Text="没有数据"  FontSize="18" Margin="104,59,1175,677"/>

<TextBlock Name="InfoText" Height="40" Margin="40,162,1175,566" FontSize="18"/>

在上面的代码中,添加了用于显示氛围光数据的TextBlock控件和2个控制按钮,其中一个按钮用于启动氛围光数据的捕获,另一个按钮则用于停止数据捕获。

前台运行效果如图12-13所示。

I(@~5KCXZ39SWT)S%L4TP4O

 

12-13 获取氛围光数据的界面

布局好前台界面后,接下来介绍如何实现后台逻辑功能。首先在后台定义几个全局变量并在构造方法中初始化。代码如下所示:

private LightSensor sensor;

private uint desiredReportInterval;

public MainPage()

{

    this.InitializeComponent();

    sensor = LightSensor.GetDefault();

    if (sensor != null)

    {

        uint minReportInterval = sensor.MinimumReportInterval;

        desiredReportInterval = minReportInterval > 16? minReportInterval : 16;

        Closebutton.IsEnabled = false;

    }

}

在上面的构造方法中,使用LightSensor.GetDefault方法获得氛围光传感器的引用对象sensor,然后设置“停止”按钮不可使用。

定义完全局变量后,接下来对“获取”按钮添加GetData_Click事件处理方法,单击这个按钮启动氛围光读数的捕获。具体代码如下所示:

private void GetData_Click(object sender, RoutedEventArgs e)

{

    if(sensor!=null)

    {

       //注册ReadingChanged事件的处理程序

        sensor.ReadingChanged += new TypedEventHandler<LightSensor, LightSensorReadingChangedEventArgs>(GetChangedData);

        InfoText.Text = "开启设备";

        Closebutton.IsEnabled = true;

        GetDataButton.IsEnabled = false;

    }

}

在上面的代码中,为sensor对象的ReadingChanged事件添加事件处理方法GetChangedData,当氛围光传感器驱动程序捕获到设备的氛围光发生变化时,会触发ReadingChanged事件进而执行GetChangedData方法。下面来介绍GetChangedData方法的实现过程。

GetChangedData方法中,定义了获取氛围光传感器数据并将数据显示到前台界面的过程,具体代码如下所示:

async private void ReadingChanged(object sender, LightSensorReadingChangedEventArgs e)

{

    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>

    {

        //获得氛围光传感器的读数

        LightSensorReading reading = e.Reading;

        ScenarioOutput_LUX.Text = String.Format("{0,5:0.00}", reading.IlluminanceInLux);

    });

}

在上面的方法中,首先从参数e中获得LightSensorReading类型的对象reading,根据reading对象的IlluminanceInLux属性获取设备氛围光的数据,将它显示在ScenarioOutput_LUX控件中。

为“停止”按钮添加单击事件处理方法CloseData_Click(),当单击此按钮时停止氛围光数据的捕获,CloseData_Click方法的代码如下所示:

private void CloseData_Click(object sender, RoutedEventArgs e)

{

    if (sensor != null)

    {

        sensor.ReadingChanged -= new TypedEventHandler<LightSensor, LightSensorReadingChangedEventArgs>(GetChangedData);

        InfoText.Text = "关闭设备";

        Closebutton.IsEnabled = false;

        GetDataButton.IsEnabled = true;

    }

}

启动调试,单击名字为“获取”的按钮便开始获取氛围光传感器的读数,单击“停止”按钮停止数据捕获。需要注意的是,在测试本示例时应确保测试设备支持氛围光传感器。运行效果如图12-14所示。

 

[R`PJS_0YRNQ]U_)}X~@(91

12-14 显示氛围光的界面

LightSensor类同样有一个GetCurrentReading方法,该方法能获得当前氛围光读数,返回值类型为LightSensorReading,参照主动获取陀螺仪读数的部分,也可以使用计时器每隔一段时间主动获取一次当前设备氛围光读数。

 

本文选自自机械工业出版社3月出品的《Windows 8 应用开发权威指南》第12章 传感器

WIN8应用开发权威指南立11

相关文章:

  • 子串判断
  • arm汇编程序中的[|]
  • 实时中位数
  • 【spring】IllegalArgumentException Can not set field to $Proxy 在spring中使用事物或AOP遇到的错误...
  • 约瑟夫问题
  • C#实现UDP分包组包
  • tomcat 集群搭建
  • 善变的同伴
  • IDC:PC 今年第一季度出货量继续下滑趋势,比起去年同期跌了13.9%
  • 非递归中序,后序遍历二叉树
  • Eclipse安装aptana
  • udp datetime服务
  • linux信号浅谈
  • hdu 2142 Can you find it?
  • 线程锁
  • php的引用
  • angular组件开发
  • docker-consul
  • ESLint简单操作
  • jdbc就是这么简单
  • Object.assign方法不能实现深复制
  • Redis字符串类型内部编码剖析
  • RxJS: 简单入门
  • swift基础之_对象 实例方法 对象方法。
  • Vue.js-Day01
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 从0实现一个tiny react(三)生命周期
  • 分享几个不错的工具
  • 给初学者:JavaScript 中数组操作注意点
  • 好的网址,关于.net 4.0 ,vs 2010
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • 微信公众号开发小记——5.python微信红包
  • 栈实现走出迷宫(C++)
  • 自制字幕遮挡器
  • 回归生活:清理微信公众号
  • ​马来语翻译中文去哪比较好?
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (3)STL算法之搜索
  • (done) 两个矩阵 “相似” 是什么意思?
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (解决办法)ASP.NET导出Excel,打开时提示“您尝试打开文件'XXX.xls'的格式与文件扩展名指定文件不一致
  • (一) springboot详细介绍
  • (转)Linq学习笔记
  • (转)linux 命令大全
  • (转)程序员疫苗:代码注入
  • (转载)(官方)UE4--图像编程----着色器开发
  • ***汇编语言 实验16 编写包含多个功能子程序的中断例程
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .NET CORE 第一节 创建基本的 asp.net core
  • .net core webapi 大文件上传到wwwroot文件夹
  • .NET Core 实现 Redis 批量查询指定格式的Key
  • .NET Core 中插件式开发实现