随着移动设备作为计算平台的成熟,它们获得了更丰富的功能,这些进步常常伴随着新传感器的引入。智能手机上集成了众多生理感官,例如摄像头让设备“看”到外部世界,麦克风则让设备“听”。事实上,黑莓10手机配备了前后双摄像头和双麦克风,以实现空间分辨率。
除了摄像头和麦克风,还有其他方式让设备“看”到世界,比如光线和接近传感器。将黑莓10设备视为传感器,自然可以引出确定环境上下文的方法,并基于这些提供无与伦比的用户体验。作为开发者,可以在应用程序中利用以下类型的传感器:加速度计、磁力计、温度传感器、陀螺仪、指南针、接近传感器、枪套、旋转传感器、GPS、麦克风和摄像头。
为了获取更多信息,请查看传感器文档
,并开始构建应用程序。
文档很好,但示例对于开发者来说更具可读性。考虑到这一点,还提供了一个既实用又有趣的示例应用程序
。
对此非常兴奋,并期待看到如何将传感器集成到应用程序中。让打破传感器只用于游戏和地图的误解!
SensorDemo示例展示了如何使用QtSensor模块来实现3D旋转、运动报警、指南针、手电筒、运动报警和碰撞检测。这个示例是在原生层(Cascades/QML)上制作的。
黑莓10原生SDK Beta 3
克隆示例仓库sample application
。
启动黑莓10原生SDK Beta 3,从文件菜单中选择导入。
展开“常规”,选择“将现有项目导入工作区”。点击下一步。
浏览到示例目录位置,然后点击确定。
示例项目应该显示在项目部分。点击完成将项目导入工作区。
在项目资源管理器窗格中,右键单击项目(例如SensorDemo),然后选择构建项目。
在项目资源管理器窗格中,右键单击项目(例如SensorDemo),然后选择“以黑莓C/C++应用程序运行”。
应用程序现在将安装并启动在设备上;如果没有,可能需要设置环境
。
import bb.cascades 1.0
import QtMobility.sensors 1.2
TabbedPane {
id: tabPane
showTabsOnActionBar: true
onCreationCompleted: {
OrientationSupport.supportedDisplayOrientation = SupportedDisplayOrientation.All;
tabPane.activeTab = compassTab;
}
/*
Block of statements for other tabs such as Motion Alarm, Compass, Flashlight, Motion Alarm and Collision Detector.
*/
Tab {
id: rotation3DTab
title: qsTr("Rotation 3D")
imageSource: "images/rotation3d.png"
Page {
ControlDelegate {
source: "rotation3D.qml"
delegateActive: (tabPane.activeTab == rotation3DTab)
}
}
}
}
import bb.cascades 1.0
import bb.multimedia 1.0
import QtMobility.sensors 1.2
Container {
//! [0]
attachedObjects: [
RotationSensor {
id: rotation
// Create variables to hold rotation reading values
property real x: 0
property real y: 0
property real z: 0
//
Turn on the sensor
active: true
/*
Keep the sensor active when the app isn't visible or the screen is off (requires app permission in bar-descriptor)
*/
alwaysOn: true
/*
If the device isn't moving (x&y&z==0), don't send updates, saves power
*/
skipDuplicates: true
onReadingChanged: {
// Called when a new rotation reading is available
x = reading.x
y = reading.y
z = reading.z
}
}
]
//! [0]
layout: DockLayout {}
ImageView {
horizontalAlignment: HorizontalAlignment.Center
verticalAlignment: VerticalAlignment.Center
imageSource: "images/device.png"
}
Container {
layout: AbsoluteLayout {}
//! [1]
Label {
layoutProperties: AbsoluteLayoutProperties {
positionX: 480
positionY: 685
}
text: qsTr("%1°").arg(rotation.x.toPrecision(4))
textStyle {
base: SystemDefaults.TextStyles.BodyText
color: Color.Yellow
fontWeight: FontWeight.Bold
}
}
//! [1]
Label {
layoutProperties: AbsoluteLayoutProperties {
positionX: 480
positionY: 460
}
text: qsTr("%1°").arg(rotation.y.toPrecision(4))
textStyle {
base: SystemDefaults.TextStyles.BodyText
color: Color.Yellow
fontWeight: FontWeight.Bold
}
}
Label {
layoutProperties: AbsoluteLayoutProperties {
positionX: 335
positionY: 390
}
text: qsTr("%1°").arg(rotation.z.toPrecision(4))
textStyle {
base: SystemDefaults.TextStyles.BodyText
color: Color.Yellow
fontWeight: FontWeight.Bold
}
}
}
}