目录
要求
预备知识
熟悉在 Adobe AIR 上构建移动应用程序,包括熟悉 Objective C、Xcode 或 Android 开发。
需要的第三方产品
用户水平
中级
需要的产品
- Flash Builder 4.5 Premium(下载试用版)
示例文件
注意:要使用此原生扩展,您需要 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 :
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 的原生扩展的更多信息,请参阅:
评论