2KB项目,专业的源码交易网站 帮助 收藏 每日签到

了解 Windows Phone 8 的传感器 API

  • 时间:2019-03-16 15:37 编辑:2KB 来源:2KB.COM 阅读:437
  • 扫一扫,手机访问
  • 分享
摘要:
Windows Phone 英文原文:Understanding the Sensor APIs

引见

虽然减速计,指南针,陀螺仪和活动传感器等分歧的传感器前往分歧类型的数据,但它们运用类似的形式来陈述(反应)它们各自前往的数据。在接下来的几页中,你将学会怎么读取分歧传感器前往数据的技巧我们引见了一些办法,你可依此来构建一些根本的示例使用顺序。传感器(Sensors)API的类和接口构成可以在 Windows.Devices.Sensors 定名空间中找到。

你会留意到,在Windows Phone 8 SDK中有两个自力的传感器API。Microsoft.Devices.Sensors 中的API 曾是Windows Phone 7 SDK的一部分,并引入到了Windows Phone 8。另外一个传感器的API来自Windows 8 Runtime ,是Windows Phone与Windows 8操纵系总共享的。假如你计划的在Windows Phone和Windows 8的使用顺序之间同享代码,那末应当思索运用 Windows 8传感器的API。 Windows Phone 7的传感器API在我们的书中其实不触及。

固然减速计,罗盘,陀螺仪,重力感应传感器其实不同享一个配合的基类,但它们都有一些类似的属性,办法和事情。这些配合的成员描绘于表1。

表1 常用的传感器类成员

成员
类型
描绘
GetCurrentReading 办法
前往一个只读的工具包括今朝可用的传感器数据。
GetDefault 办法
前往一个传感器实例的静态结构办法
MinimumReportInterval 属性
只读的值,属性值指定的最小值,可以经过在ReportIntervalp属性来设置。
ReadingChanged 事情
激发的事情,由以后读取数据发作变更触发。
ReportInterval 属性
设置传感器读取新的数据的频率。每次设置工夫距离时GetCurrentReading 只改动一次并前往数据。


使用顺序经过挪用GetCurrentReading办法来读取以后传感器的前往。别的,使用顺序可以触发ReadingChanged事情接纳传感器的数据,只需传感器有新的数据GetCurrentReading办法可以在传感器没有预备好时挪用,那末前往的值就为空。

留意:假如 ID_CAP_SENSORS 运用未在WMAppManifest.xml文件中设置装备摆设,GetDefault for的任何挪用将可招致额定的非法拜访(UnauthorizedAccessException)。

每一个传感器类中的都界说一个静态办法GetDefault。 GetDefault办法答应开发职员来决议传感器的硬件能否装置在特定的装备上和能否对该使用顺序可用。假如该传感器没有装置到该装备或对使用顺序不成用,GetDefault办法因为缺少传感器而前往空。

传感器的API 来处置本身使用顺序的疾速切换。当使用顺序畴前台切换过去以后,开发职员其实不需求 unhook 传感器,。不像摄像头,传感器会主动恢复,并没有供给一个明白的恢复办法。当使用顺序恢复,传感器和事情从头树立衔接并Start记载数据流。在你学会怎么处置来自传感器的数据流之前,你需求了解怎么传感器怎么前往三维的陈述数据。

前往数据的坐标系

每一个传感器陈述的数据与 x、 y、 z 坐标系统由 Windows Phone 装备界说。该装备的坐标系统牢固到装备,并顺手机的挪动而挪动。X轴是指装备的左 --> 右,+X 指装备的右边。Y 轴指的装备的底部到顶部,+ y 指向顶部。Z 轴指装备的前面-->后面, + z 指装备的后面。图 1 所示即为手机的x,y,z轴的三视图。

图1 Windows Phone的x,y,z坐标系统

由传感器运用的坐标系统,其实不必定相适配与其他 API 所运用的坐标系。此中一个例子是由XAML运用的坐标系统。纵向形式中的XAML,+y轴指出挪动装备的底部,-y轴指向相反的标的目的如今你应当清楚传感器所运用坐标舷?了,接下来将具体见绍怎么从传感器获得数据。

经过事情来读取数据

传感器经过 ReadingChanged 事情来树立一个事情驱动的交互模子。ReadingChanged 事情将一个事情参数类的实例发送到事情处置顺序,事情参数类的类型随传感器分歧而分歧。 减速度计将通报一个通报减速度计ReadingChanged事情参数,指南针将通报一个指南针ReadingChanged的事情参数等。

ReadingChanged 事情处置顺序经过后台线程来挪用。假如事情处置顺序更新用户界面,更新逻辑脚背被调剂到UI线程。下面的代码片断显示例子,处置历来自陀螺仪传感器的 ReadingChanged事情:

void sensor_ReadingChanged(object sender,
    GryometerReadingChangedEventArgs e)
{
    GryometerReading reading = e. Reading;
    Dispatcher.BeginInvoke(() =>
    {
        // add logic here to update the UI with data from the reading
        ...
    }
}

书的第10章中我们构建的传感器示例使用顺序,没有运用ReadingChanged事情的。 取而代之,示例使用顺序样本运用GetCurrentReading 办法来取得数据。

获得数据

使用顺序不需求等候传感器来触发一个事情来请求传送数据 。 传感器可以经过挪用 GetCurrentReading 来输出数据 。 一旦使用顺序收回它需求新的数据的讯息,便 经过挪用 GetCurrentReading 办法来获得数据。 例如 ,数据的读取可以经过按钮 单击,计时器滴答事情或后台辅佐线程来启动 :

if (compassSensor != null)
{
    CompassReading reading = compassSensor.GetCurrentReading();
    if (reading != null)
    {
        // add logic here to use the data from the reading
        ...
    }
}

 你将经过示例使用顺序的计时器滴答(timer tick)事情中来读取传感器数据 。 在实践演示之前,你需求创立一个新的项目并开发一个使用可以显示传感器的数据。

创立示例使用顺序

翻开 Visual Studio 并创立新的 Windows Phone 使用顺序定名为传感器。示例使用顺序将从重力、 指南针、 轴摇晃、 测斜仪和标的目的传感器中读取值。图2中所示的示例使用顺序显示一组的彩条为重力、 轴摇晃和 测斜仪中的数据。每一个组的酒吧显示传感器读数,x、 y 和 z 坐标。在屏幕的底部,该使用顺序显示一个legend和关于传感器的提醒信息,即来自标的目的传感器的读数。

图 2 传感器示例使用顺序 (控件项代表 的x、 y 和 z 是由减速度计、 轴摇晃或测斜仪所前往的值)

当传感器前往正值时,将在零线之上绘制一个可缩放标签栏。前往负值是会在零线之下绘制一个标签栏。由于分歧传感器具有分歧的取值范畴,所以从传感器前往值到转化成以像素表现的标签栏高度的过程当中应运用一个可伸缩的系数。固然,起首你得会创立一个可重用的控件栏来表现负数和正数。

创立可重用的控件

为了简化使用顺序示例,您就会生成一个可重用的控件,答应您设置比例巨细和传感器的值。当属性比例巨细或值更改时,该控件应绘制响应的负数或正数控件栏,并显示带有标签的值。把持栏经过运用 Windows Phone 用户控件的模板项来完成,点击项目(Project) >> 中添加新菜单项(Add New Item Menu)。为新的项目栏的定名。以下所示为新控件的 XAML 标志。
表1 标志栏控件

图 3 栏控件与 2.0 的缩放值和以后值为-1.0。

Listing 1 Markup for the Bar control

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="1*" />                         #1
        <RowDefinition Height="1*" />                         #1
    </Grid.RowDefinitions>
    <Rectangle x:Name="positiveBar" VerticalAlignment="Bottom" />
    <Rectangle x:Name="negativeBar" Grid.Row="1" VerticalAlignment="Top" />
    <TextBlock x:Name="label" VerticalAlignment="Center"        #2
        Grid.RowSpan="2" Text="0" TextAlignment="Center" />     #2
</Grid>
#1 Divide control into two rows
#2 Center label 

网格划分红两个半 #1 且每一个包括一个矩形。第一个矩形显示正值,而另外一个表现负值。放在标签 #2 显示栏两头的显示值为 标签栏的值。图 10.3 演示控件栏的模样,此时缩放值设置=2.0 和以后值设置=1.0。

图3  控件栏的模样,此时缩放值=2.0 和以后值=1.0。

注栏控件的页可认为矩形填充分歧的色彩。以下为添加新的属性 BarFill 到在Bar.xaml.cs 文件中的:

public Brush BarFill
{
    get { return positiveBar.Fill; }
    set
    {
        positiveBar.Fill = value;
        negativeBar.Fill = value;
    }
}

经过设置BarFill的属性来为画笔分派矩形栏值为正或负

注: 假如您需求创立可重用的 XAML 把持,BarFill 属性和其他依靠项的相干属性。该控件需求声布模板部件,并将供给作为默许模板的 XAML 标志。  << Silverlight 5 in Action >> 一书中有关于创立可重用 XAML 具体材料。

下一步你将创立设置的缩放值和栏值的属性。因为你不晓得值的范畴,你需求挪用方通知控件怎么缩放到适配矩形的高度值。假定您需求的栏来显示值 2 和 - 2之间,而Barcontrol 是 200 像素高。值2 将需求将正的栏值设为 100 像素高,而值为 -1 的话将需求负的栏值设为 50 像素高。下一个具体列表引见怎么经过设置 ScaleandValue属性来盘算信息栏的高度。

2 盘算 栏的缩放 高度 值属性

private double scale;
public double Scale
{
    get { return scale; }
    set
    {
        scale = value;
        Update();                        #1
    }
}
private double barValue;
public double Value
{
    get { return barValue; }
    set
    {
        barValue = value;
        Update(); 
    }
}
private void Update()
{
    int height = (int)(barValue * scale);                  #2
    positiveBar.Height = height > 0 ? height : 0;
    negativeBar.Height = height < 0 ? height * -1 : 0;     #3
    label.Text = barValue.ToString("0.0");   
}
#1 Recalculate when properties change
#2 Calculate height of bar
#3 Invert negative height

缩放范畴值和浮动属性经过前面的字段和容易的getter和setter来完成。在每一个属性外面可经过挪用Update办法#1来从头盘算矩形栏的高度并更新用户界面。Update办法内你经过缩放比例的范围和栏的值字段 #2 失掉的值就是应绘制在栏的像素。假如盘算失掉的的高度值大于0,正的栏高度值将更新为新值。假如盘算的高度值小于零,你分派负的栏的高度值及盘算之前的值取负#3。最初,你可使用ToString办法来设置格局化的字符串离开该标签的Text属性。

如今,你有一个Tools栏控件,您可以创立示例使用的用户界面。 您需求添加一个XML定名空间到MainPage.xaml以便你可使用新的Tools栏控件:

xmlns:l="clr-namespace:Sensors"

你如今可使用在MainPage.XAML标志中运用把持栏。 你需求在MainPage为每一个传感器设置三个把持栏,一共有九个把持栏。

本文中的一切译文仅用于进修和交换目标,转载请务必注明文章译者、出处、和本文链接。 2KB翻译任务按照 CC 协定,假如我们的任务有进犯到您的权益,请实时联络我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部