BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Vibration原生扩展示例

| 作者 Adobe 关注 0 他的粉丝 发布于 2011年10月15日. 估计阅读时间: 9 分钟 | Google、Facebook、Pinterest、阿里、腾讯 等顶尖技术团队的上百个可供参考的架构实例!

目录

要求

预备知识

熟悉在Adobe AIR上构建移动应用程序,包括熟悉Objective C、Xcode或Android开发。

需要的第三方产品

用户水平

中级

需要的产品

示例文件

注意:要使用此原生扩展,您需要Flash Builder 4.5.1 Premium和Adobe AIR 3,可以在Adobe Labs上获得它们的候选发行版。

Vibration类是针对Adobe AIR的一个原生扩展。它允许来自ActionScript的AIR应用程序开发人员使用Android或iOS移动设备的震动功能。

附加的ZIP文件包含:

  • 目录VibrationActionScriptLibrary中的ActionScript库。此目录包含创建Vibration扩展的ActionScript部分的Flash Builder项目。
  • 目录VibrationAndroidLibrary中的Android原生库。此目录包含创建Vibration扩展的Android原生部分的Eclipse项目。要构建Eclipse项目,首先将FlashRuntimeExtension.jar从AIR_SDK>/lib/android/FlashRuntimeExtensions.jar复制到VibrationAndroidLibrary\libs目录。
  • 目录VibrationiOSLibrary中的iOS原生库。此目录包含创建Vibration扩展的iOS原生部分的Xcode项目。要构建Xcode项目,首先将FlashRuntimeExtension.h从<AIR_SDK>/include/FlashRuntimeExtensions.h复制到VibrationiOSLibrary目录。
  • 一个名为ReadyToUseExtension的目录,包含AIR应用程序开发人员使用原生扩展所需的所有内容:ANE文件、SWC文件和包含扩展ID的文本文件。
  • 一个名为TestVibrationExtension的目录,包含使用Vibration原生扩展的示例AIR应用程序。

ActionScript库

ActionScript库包含Vibration类。Vibration类向AIR应用程序提供了这个公共方法和属性:

  • public static function get isSupported(): Boolean
  • public function vibrate(duration:Number): void

该AIR应用程序可以创建Vibration类的多个实例。但是Vibratione类仅创建一个ExtensionContext类实例,所有Vibration实例都可以共享该实例。

应用程序用途

要使用Vibration扩展,AIR应用程序可以执行以下操作:

  • 通过调用isSupported检查扩展是否受支持。
  • 调用vibrate(),以毫秒作为参数指定震动的持续时间,从而导致设备震动。

例如:

var vibe:Vibration;
if (Vibration.isSupported)
{
    vibe = new Vibration();
    vibe.vibrate(2000);
}

Android应用程序

对于Android应用程序,在您的应用程序描述符文件中包含Vibration权限:

Android Permission : <uses-permission android:name="android.permission.VIBRATE"/>

iOS应用程序

对于iOS应用程序:

  • isSupported属性始终返回true。在iOS设备上,没有原生API可用于确定震动功能是否受支持。
  • 传递给vibrate()的持续时间值被忽略。设备震动由iOS确定的持续时间。

Android原生库

Android原生库是在Java中使用原生扩展Java API实现的。原生库包含以下类:

  • VibrationExtension实现FREExtension
  • VibrationExtensionContext扩展FREContext
  • VibrationSupportedFunction、VibrationInitNativeCode和VibrationVibrateFunction分别实现FREFunction

原生库还包含使用这些FREObject方法的示例:

  • getAsInt()
  • newObject()

在初始化时,原生库使用FREContext类的getActivity()方法获取应用程序的Android活动。使用返回的活动,初始化方法(VibrationInitNativeCodeFunction.call())获取震动服务:

Activity a = vibExtContext.getActivity();
vibExtContext.androidVibrator = (Vibrator) a.getSystemService(Context.VIBRATOR_SERVICE);

注意:从ActionScript部分对ExtensionContext.createExtensionContext()的调用必须先返回,原生库才能够调用派生自FREContext类的对象的方法。因此,调用vibExtContext.getActivity()发生在ActionScript部分在来自createExtensionContext()的返回值后调用的初始化函数内。对getActivity()的调用不能发生在FREContext构造函数内。

iOS原生库

iOS原生库在Objective C中使用原生扩展C API实现。原生库包含这些原生扩展C API的示例:

  • 扩展初始化器和终结器,使用签名FREInitializer()和FREFinalizer()。
  • 上下文初始化器和终结器,使用签名FREContextInitializer()和FREContextFinalizer()。
  • 原生函数,使用签名FREFunction()。原生函数包括IsSupported()、InitNativeCode()和VibrateDevice()。
  • FRENewObjectFromBool()

函数VibrateDevice()调用iOS API AudioServicesPlaySystemSound()来震动设备。但是,如果设备不支持震动,此iOS API将不执行任何操作。

注意:在iOS原生实现中,不需要初始化,所以初始化原生函数InitNativeCode()不执行任何操作。但是,该函数必不可少,因为Android原生实现需要一个初始化函数。因此,要使扩展的ActionScript接口对于所有原生实现都相同,iOS原生实现提供了存根。

延伸阅读

关于开发Adobe AIR的原生扩展的更多信息,请参阅:

查看原文:Vibration native extension sample

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT