这是对Intel超极本的第三次也是最后一次评测。很高兴地说,这并不是使用这台机器的终点。它已经成为主要开发设备,以及工作之外的所有常规用途。妻子和孩子们也非常喜欢使用它。
有三个女儿。六岁的露西喜欢在安克先生测试网站上练习单词和数字。这个网站为学前班和小学生提供了各种基于Flash的活动。露西非常喜欢她可以用触摸板或屏幕与网站互动。每当她在不支持触摸的设备上看到Windows应用时,她总是首先伸手去触摸屏幕。这不是在使用iPod Touch、iPad或Kindle Fire之后发生的事情。认为这是看到相同的Windows用户界面触发的。
自从上次评测以来,一直在研究WinRT中提供的传感器API。创建了几个简单的概念验证类型的应用程序,它们只是引用所有传感器并显示和记录输出。其中一个与第一个C#/XAML SensorFun应用程序类似,但用HTML/JavaScript编写,看看这种类型的应用程序有什么不同。发现除了语法之外,基本上是相同的。那个应用程序叫做SensorFunJS,这里是JavaScript代码的片段。
(function () {
"use strict";
WinJS.Binding.optimizeBindingReferences = true;
var orientationSensor;
var app = WinJS.Application;
function id(elementId) {
return document.getElementById(elementId);
}
function onOrientationChanged(e) {
switch (e.orientation) {
case Windows.Devices.Sensors.SimpleOrientation.notRotated:
id('orientationElement').innerHTML = "未旋转";
break;
case Windows.Devices.Sensors.SimpleOrientation.rotated90DegreesCounterclockwise:
id('orientationElement').innerHTML = "逆时针旋转90度";
break;
case Windows.Devices.Sensors.SimpleOrientation.rotated180DegreesCounterclockwise:
id('orientationElement').innerHTML = "逆时针旋转180度";
break;
case Windows.Devices.Sensors.SimpleOrientation.rotated270DegreesCounterclockwise:
id('orientationElement').innerHTML = "逆时针旋转270度";
break;
case Windows.Devices.Sensors.SimpleOrientation.faceup:
id('orientationElement').innerHTML = "朝上";
break;
case Windows.Devices.Sensors.SimpleOrientation.facedown:
id('orientationElement').innerHTML = "朝下";
break;
default:
id('orientationElement').innerHTML = "未知方向: " + e.orientation;
break;
}
}
app.onactivated = function (activationArgs) {
if (activationArgs.detail.kind === Windows.ApplicationModel.Activation.ActivationKind.launch) {
orientationSensor = Windows.Devices.Sensors.SimpleOrientationSensor.getDefault();
orientationSensor.addEventListener("orientationchanged", onOrientationChanged);
WinJS.UI.processAll();
}
};
app.start();
})();
接下来,发现了一篇关于Code Project的文章,介绍了一个Windows 8WinForm应用程序引用WinRT库并使用传感器API。这段相同的C#代码也可以用于Windows 8背后的WPF桌面应用程序。计划将这个项目的想法用于创建库,可以在Windows 8桌面应用程序中共享。以下是Yvan文章中的代码示例。
private void SensorListener() {
// 监视加速度计事件。
if (_accelerometer != null) {
_accelerometer.ReportInterval = 0;
// 默认
_accelerometer.ReadingChanged += AccelerometerOnReadingChanged;
_accelerometer.Shaken += (s, a) => _shaken++;
Log("将监视摇动活动。");
}
// 监视指南针事件。
if (_compass != null) {
_compass.ReportInterval = 0;
// 默认
_compass.ReadingChanged += CompassOnReadingChanged;
}
// 监视陀螺仪事件。
if (_gyrometer != null) {
_gyrometer.ReportInterval = 0;
// 默认
_gyrometer.ReadingChanged += GyrometerOnReadingChanged;
}
// 监视光传感器事件。
if (_light != null) {
_light.ReportInterval = 0;
// 默认
_light.ReadingChanged += LightOnReadingChanged;
}
// 监视位置传感器事件。
if (_geolocator != null) {
_geolocator.ReportInterval = 1000;
_geolocator.MovementThreshold = 1;
_geolocator.DesiredAccuracy = PositionAccuracy.High;
_geolocator.StatusChanged += GeolocatorOnStatusChanged;
_geolocator.PositionChanged += GeolocatorOnPositionChanged;
}
// 监视NFC接近事件。
if (_proximity != null) {
_proximity.DeviceArrived += ProximityDeviceArrived;
_proximity.DeviceDeparted += ProximityDeviceDeparted;
}
// 传感器循环。
while (true) {
if (_stopping)
return;
Thread.Sleep(0);
// 让需要周期的其他线程继续。
}
}
正如看到的,代码与WinRT应用程序的代码没有区别。Intel有一篇非常好的文章,标题是“从桌面应用程序中使用Windows 8WinRT API”。如果正在为Windows 8开发桌面应用程序,强烈推荐查看一下。WinRT中有很多很棒的(并且易于使用的)API。能够在桌面应用程序中利用它们真的非常令人兴奋。
就传感器在现实世界应用程序中的实用性而言,认为最大的机会在于游戏开发。这些应用程序也可能有一些模拟器和医疗保健相关的应用。
正在创建一个名为“稳手挑战”的应用程序的早期阶段。可以在Code Project上阅读应用程序概述。基本上,将超极本放在手掌上,应用程序将使用屏幕上的图表指导用户向哪个方向倾斜超极本。保持实际的X/Y/Z线与目标线越接近,得分就越高。加速度计检测到的任何摇晃都会导致扣分。尽管最初设想这个WPF应用程序是一种游戏,但可以看到类似的东西可以用于使物理治疗游戏化。只要不担心病人会掉落超极本。
正如一再声明的,真的很享受在这个机器上开发。真诚地相信,搭载Windows 8的超极本是当今完美的开发者机器。它们提供了运行多个Visual Studio实例或其他任何IDE所需的动力和速度。触摸屏和传感器也消除了需要一个单独的平板电脑来测试应用程序的需要。可以编写使用复杂手势的应用程序,并用一个简单的F5进行测试。这节省了时间、金钱和头痛。