开发原生的 Google 眼镜应用 【已翻译100%】(2/2)

使用传感器

Glass没有键盘或触摸屏,但仍然具有移动设备所有的标准的传感器。你可以使用标准的传感器组件来访问这些传感器。

定位和GPS

Glass内置有GPS。TLocationSensor具有一个OnLocationChanged事件,这一事件在GPS组件被激活时产生,在有除Distance性质的以外的位置信息改变时也会产生这一事件。在OnLocationChanged事件的处理方法中,有一个 NewLocation参数,这一参数包含新位置的经纬度。

运动和方向追踪

要追踪Glass和穿戴者的运动和方向,需要使用TMotionSensor和TOrientationSensor组件。它们提供设备的加速度、角度状态、前进方向、速度和运动等信息。由于Glass被用户穿戴在头上,因此设备的这些运动信息实际上被翻译成用户如何张望、头部如何运动等信息。

实际上信息是从很多不同的传感器中获取的,包括陀螺仪、磁力计、加速计。你可以在一段时间内使用一个TTimer来轮询传感器的运动和方向信息,也可以只读取某一个时刻的信息。

Camera处理

TCameraComponent 可以操作相机中的帧. 可以一次抓取多个帧作为预览,也可以一次一帧. Google在抓取图像时需要保持设备的打开状态,但不一定需要展示正在捕获的图像 (尽管展示当前图像更有利于使用者).

调用 TCameraComponent, 设置 Active属性为true, 接着相应OnSampleBufferReadyevent. 记住这一过程不是在 UI 线程里, 所以要想UI 显示更新的图像,需要使用下述代码:

// Event handler for the CameraComponent’s SampleBufferReady event
procedure TMainForm.CameraComponent1SampleBufferReady(
  Sender: TObject; const ATime: Int64);
Begin
  // Use Synchronize to move the execution to the main UI thread.
  TThread.Synchronize(TThread.CurrentThread, GetImage);
end;

procedure TMainForm.GetImage;
begin
  // imgCameraView is a TImage component on the UI for displaying the image
  CameraComponent1.SampleBufferToBitmap(imgCameraView.Bitmap, True);
end;

使用触摸板
与touchpad进行交互的最简单的方式是交互式手势。Pan 交互式手势提供了一系列事件当你的手指在触摸板上滑动时。举个例子,你可以使用Pan手势的水平移动来完成不同选项之间的切换。

为响应交互式手势,只需简单的拓展表单的触摸属性,然后指定独特的你想接受事件的交互式手势。 之后,当用户进行交互式手势操作时,OnGesture事件会触发这里有一个手势处理器的例子,允许用户基于交互式手势的水平位置来设置屏幕的超时时间。

procedure TMainForm.FormGesture(Sender: TObject;
  const EventInfo: TGestureEventInfo; var Handled: Boolean);
var
  x: Integer;
begin
  // Handle the Pan Interactive Gesture
  if EventInfo.GestureID = igiPan then
  begin
    // Specific processing for the beginning of the gesture – save the start location
    if TInteractiveGestureFlag.gfBegin in EventInfo.Flags then
    begin
      fPanStart := EventInfo.Location;
      fStartVal := pbTimeOut.Value;
    end
    else
    // Specific processing at the end of the gesture – set the timeout
    if TInteractiveGestureFlag.gfEnd in Eventinfo.Flags then
    begin
      SetScreenOffTimeout(Trunc(pbTimeOut.Value * 1000));
    end
    else
    // Update the display based on the current gesture position
    begin
      if not (TInteractiveGestureFlag.gfInertia in EventInfo.Flags) then
      begin
        x := Trunc((fPanStart.X - EventInfo.Location.X)/10) * 10;
        pbTimeOut.Value := fStartVal + x;
      end;
      DisplayTimeOut(Trunc(pbTimeOut.Value));
    end;
  end;
end;

注意一点,如果用户在触摸板上滑下那么除了Pan手势之外后退按钮事件也会被触发。你可以 自己捕获并处理后退按钮事件。用下面的代码在你的表单中简单的添加OnKeyUp事件处理器:

if Key = vkHardwareBack then
begin
  // Do whatever you want to do here
  Key := 0;
  // Set Key = 0 if you want to prevent the default action
end;

如果你总是设置Key为0,那么用户将不能退出应用,因此适当的考虑考虑。

结论

RAD Studio 和Appmethod为开发原生Glassware提供了极大的便利. 加上支持 C++ 和 Object Pascal, 选择的余地大大增加r. RAD Studio还提供了 原生的示例应用演示了上述的种种特性. 文档也详细说明了 操作步骤 . 此外还提供了 使用其它多种感应器,手势动作等等的示例. 想直接进入 GDK 查看相关的细节也很方便. 而且GDK也在一直持续更新. 可以在我后续的Delphi.org的博文中看到 相关GDK的说明.

时间: 2024-12-27 16:42:19

开发原生的 Google 眼镜应用 【已翻译100%】(2/2)的相关文章

Docker —— 用于统一开发和部署的轻量级 Linux 容器 【已翻译100%】

使用Docker容器--轻量灵活的VM同类,来接管"依赖地狱".学习Docker是如何基于LXC技术,通过把应用包装在容器里来使应用具有移植性和独立性. 想象一下可以轻松地把应用和它的依赖打包,然后在其他的开发.测试和生产环境上平滑的运行.这就是开源Docker项目的目标.尽管它现在还没正式到生产阶段,最新的发布(本篇文章编写时是0.7.x)使得Docker实现这一伟大目标又近了一步. Docker容器试图解决"依赖地狱"问题.现代的应用通常从已存在的组件组合而来,

使用 Docker 作为 Python 开发环境 【已翻译100%】

(或者让我们绕过virtualenv) 本文中,我将尝试展示用Docker开发python应用(主要是Web应用)的可行方法.虽然我本人专注于Python的Flask微框架,但本文目的是演示如何通过Docker更好地开发和共享应用程序,(由任何语言和框架开发的应用程序).Docker通过封装依赖项,大大减少了开发环境和正式产品的差距. 大多数Python开发人员在开发中使用virtualenv.它提供了一种易用的机制让应用程序使用自己专用的依赖项,这些依赖项可能与在其它应用程序或操作系统存在冲突

开始在 OS X 开发 OpenGL 应用 【已翻译100%】

有一段时间了,我一直想着进入某些视频游戏开发领域. 对于OpenGL我也很感兴趣,并且因此我也想到了为什么不深入去研究研究OpenGL,再去做一款视频游戏呢?我已经有了许多我想要去探索的游戏的点子,但第一都是得要婴儿学步的不是吗? 我的原始计划是要去构建: 1.一个类似AI的 Pong 游戏克隆 2.一个 几何战争 游戏的克隆 3.开始着手实现属于我自己的疯狂想法 然而,我最近在浏览HackerNew时偶然发现了 (游戏机制探索器)Game Mechanic Explorer. 它是一个有Joh

50 个 jQuery 插件可将你的网站带到另外一个高度 【已翻译100%】

Web领域一直在发生变化并且其边界在过去的每一天都在发生变化(甚至不能以小时为计),随着其边界的扩展取得了许多新发展.在这些进步之中,开发者的不断工作创造了更大和更好的脚本,这些脚本以插件方式带来更好的终端用户体验,它们比原来更轻量级,还有更强的处理能力. 关键是这些新发展起来的脚本和插件是能构建响应式Web的,而且还不会丧失它们原有的功能特性--除了更优秀和更轻巧(就文件大小而言)之外,它们还不会增加页面加载的时间. 通过浏览文档,掌握JQuery的语法是很容易的.它可以支持选择DOM元素,创

Groovy 现在可运行在 Android 系统上了! 【已翻译100%】

在最近的GR8Conf Europe 2014期间,SpringSource/Pivotal的Groovy高级软件工程师 Cédric Champeau已经在Andriod上完成一次Groovy代码的现场pull请求的合并. Groovy开发人员为了在Android上运行Groovy已经等待好几年了.因为各种困难,它的实现被推迟了,这包括Andriod Dalvik虚拟机的不同字节码和Groovy代码的动态特性等.官方对Android的支持可能在Groovy2.4版本.InfoQ采访了 Cham

如何雇一个牛逼的 Node.js 开发者 【已翻译100%】

初创公司是我的激情所在,而我干的也是管理一群雄心壮志的开发人员.我工作在Strongloop,并且已经在很多初创公司待过.初创公司在雇佣问题上有它独特的挑战----预算紧,期限近.加上要使用开源框架进行开发,而且还是相对年轻的框架,如Node.js,这一切使得雇佣一个合适的团队成为了一种巨大的挑战. 正如所有新兴并被快速采用的技术框架一样,一开始的挑战就是给你的技术团队增加高效的人才资源.在快速得出关于把 Javascript 开发变成 Node.js 工厂的结论之前,让我们先来看看关于 Nod

为什么要使用 Apache Stratos 【已翻译100%】

Apache Stratos (处于孵化阶段)是一个由Apache community支持的开放的PaaS框架项目.它带来了企业级的服务质量.管理以及安全性,表现为内部私有云,外部管理云和公有云.企业组织,云基础设施供应商以及云服务提供者可以自由的修改,发布和部署 Apache Stratos,而没有任何知识产权的限制,授权费用以及服务费. 开放的协同工作能力 一个开放的 PaaS 服务支持异构的IaaS环境以及多平台,多语言,多框架的环境.Apache Stratos 的cartridge模型

使用 Protocol Buffers 代替 JSON 的五个原因 【已翻译100%】

在Ruby和Rails开发者中,面向服务(Service-Oriented)架构有一个当之无愧的名声,它是一个缓解程序规模恶性增长的一个强有力的途径,可在大量应用程序中提取关注点.这些新生小巧的服务通常继续使用Rails或Sinatra,并使用JSON在HTTP上通信.尽管JSON作为一个数据相互交换格式,有很多优点:人类可读.可理解,并通常表现出色. 浏览器和JS并不直接处理数据--尤其是遇到内部服务时.我的观点是,结构化格式,例如谷歌的Protocol Buffers,是一个比JSON在编码

Google+称功能已达100种 计划向全体用户开放

11月6日消息,据国外媒体报道,谷歌今年6月发布社交媒体网站Google+,目前,谷歌正向全体用户开放Google+,并融入视屏聊天与搜索工具新功能以吸引用户. Google主管Google+的全球高级副总裁维克·冈多特拉( Vic Gundotra)在博客中称,谷歌提供新视频群聊功能Hangouts,可在手机和网络上进行实时视频.谷歌还正在为Google+添加搜索功能.此前,市场研究机构ComScore也称,7月Google+浏览量达到2900万次. 谷歌宣传Google+功能达到100种,意