设为首页 收藏本站
查看: 905|回复: 0

Windows Phone 7 开发 31 日谈——第11日:加速感应器

[复制链接]

尚未签到

发表于 2015-5-8 14:01:58 | 显示全部楼层 |阅读模式
  本文是“Windows Phone 7 开发 31 日谈”系列的第11日。
  昨天,我们讨论了Windows Phone的软键盘。今天,来谈谈基于硬件的加速感应器以及如何利用它提供的信息。
  什么是加速感应器?
  目前缺乏一个更好的定义,Windows Phone设备中的加速度感应器是用来度量3个坐标轴加速度的装置,这里说的加速度是相对于自由落体加速度的。除了一个时间戳之外,值都是用重力值(G)表示的(1G = 9.81 m/s2)。这意味着如果将电话正面朝上平放在一个绝对的平面上,Z轴应该为-1.0,其他两个轴的数据为0。下面的图例演示了不同的值(感谢的来自于WindowsTeamBlog的图片):
DSC0000.png
  如何从WP7的加速感应器中获取数据?
  幸好,这非常简单。复杂的是我们需要管理一些线程,但其实也很简单。下面是我们所要做的:
  
       
  • 初始化一个Accelerometer对象。   
  • 创建一个ReadingChanged()事件处理程序来监视数据的变化。   
  • 将事件中的结果传回我们的页面线程(这个事件是在另一个线程中触发的)。   
  • 在程序中使用这些数据。
    这是我这个例子中MainPage.xaml.cs的全部内容。你会看到我在MainPage.xaml文件中创建了3个TextBlock(XText, YText和ZText) ,所以我可以在屏幕中显示这些值。同样还可以看到我添加了一个Microsoft.Devices.Sensors名称空间的引用来访问Accelerometer类。

DSC0001.gif DSC0002.gif 代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
using Microsoft.Devices.Sensors;
namespace Day11_Accelerometer
{
    public partial class MainPage : PhoneApplicationPage
    {
        Accelerometer acc = new Accelerometer();
        // Constructor
        public MainPage()
        {
            InitializeComponent();
            acc.ReadingChanged += new EventHandler(acc_ReadingChanged);
            acc.Start();
        }
        void acc_ReadingChanged(object sender, AccelerometerReadingEventArgs e)
        {
            Deployment.Current.Dispatcher.BeginInvoke(() => ThreadSafeAccelerometerChanged(e));
        }
        void ThreadSafeAccelerometerChanged(AccelerometerReadingEventArgs e)
        {
            XText.Text = e.X.ToString("0.000");
            YText.Text = e.Y.ToString("0.000");
            ZText.Text = e.Z.ToString("0.000");
        }
    }
} 模拟器不能模拟加速感应器的数据    是的。如果你下载了本文最后的代码,肯定会纳闷为什么Z轴数据总是-1呢,这是因为模拟器认为它是在平面上的。它没有(有效的)方法来模拟加速感应器的数据。但是有一些聪明人找到了让这成为现实的方法。本篇文章剩下的部分让我很为难。我很想给每个模拟器解决方案写一个例子,但是还有这么多好的方法来模拟加速感应器数据,我认为让你们知道这些比仅仅写代码示例要好。这有很多建议供你去实验(每个站点都提供了代码示例):
  Reactive Extensions
  Reactive Extensions是一个框架允许你为加速感应器(还有位置服务,我会在第13日中介绍)模拟数据而无需真实设备。实际上你无法控制这个动作,它只能给你产生随机数据。安装起来非常简单,而且相比于因为没有真实的手机而不能开发来说十分地高效。MSDN的这个站点中有一个非常好的演练:http://bit.ly/bdeaft。
  accelKit
  这个可能是最酷的选择了。它利用摄像头和增强现实,允许你移动手机的打印图就像在真实世界中移动它一样。它是如此的酷以至于使我神魂颠倒,有两点原因:
  
       
  • 它允许你真正地模拟动作。   
  • 它利用了增强现实,人。这是一个了不起的技术应用。
    来看看这些代码示例,来这里下载附加的库:http://bit.ly/9TfqaSn
  WiimoteLib
  这个库不仅仅能用于Windows Phone模拟器,不过它确实可以为我们的目的非常好的工作。故事是这样的:如果你有一个任天堂的Wii,你可以用控制器(一个Wii遥控器)来生成你的加速感应器数据。Brian Peek是将这些内容集成在这个小托管代码库中的开发人员,如果你想实现的话可以到他的站点获取相关信息!http://bit.ly/aUdEEW
  Windows Mobile Unified Sensor API
  是的,就是“Windows Mobile”。这是在某些类型的Windows Mobile 6.x 设备上与加速感应器交互的方式。这篇文章描述了一种利用这种技术在Windows Phone上开发的方法。他们好像没有提供代码示例,但看起来非常简单:http://bit.ly/crHbW9
  下载代码示例
  记住上述所有的解决方案都是暂时的。直到拿到设备之前这些都是在“伪造”加速感应器的数据。没有什么能替代在真实设备上运行你的代码。如果你没有机会这么做,请联系我。我来看看能为你在手机面前做什么,即使只是几小时。
DSC0003.png
  原文地址:http://www.jeffblankenburg.com/post/31-Days-of-Windows-Phone-7c-Day-11-Accelerometer.aspx
  

如果大家喜欢我的文章,请点击“推荐”,谢谢!  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-65022-1-1.html 上篇帖子: Windows Phone 7 开发 31 日谈——第13日:位置服务 下篇帖子: Windows Phone 7 开发 31 日谈——第9日:调试技巧
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表