【AICon】 如何构建高效的 RAG 系统?RAG 技术在实际应用中遇到的挑战及应对策略?>>> 了解详情
写点什么

Vibration 原生扩展示例

  • 2011-10-14
  • 本文字数:2054 字

    阅读完需:约 7 分钟

目录

要求

预备知识

熟悉在 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 :

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

2011-10-14 00:00983
用户头像

发布了 27 篇内容, 共 23553 次阅读, 收获喜欢 2 次。

关注

评论

发布
暂无评论
发现更多内容

怒肝最新保姆级前端学习路线,速成贴心全面!

程序员鱼皮

CSS JavaScript Vue 大前端 React

五层验证系统,带你预防区块链业务漏洞

华为云开发者联盟

区块链 智能合约 漏洞 可信 自免疫系统

流程即代码:低代码 & 云研发 IDE —— Uncode

Phodal

ide 云开发 云研发

阿里P9分享:基于JDK 8 源码剖析

Java架构师迁哥

限流篇,欣赏guava的RateLimiter

下雨喽

Java 架构 设计 限流 Guava

从原理到实践,手把手带你轻松get数仓双集群容灾

华为云开发者联盟

容灾 集群 数仓 集群容灾 双集群

Apache Calcite:异质数据源优化查询框架

余生

sql Apache Calcite

来自Linux老学员的经验分享,新生必看!

学神来啦

Linux 运维 安全 虚拟机

10次面试9次被刷?吃透这500道大厂Java高频面试题后,怒斩offer

Java 程序员 架构 面试

野生程序员高考试卷,试试你能打多少分?

北游学Java

程序员 高考

Apache APISIX 开源 2 周年!

API7.ai 技术团队

开源 架构 后端 网关

如何快速分类整理电脑文件

TroyLiu

文件管理 文件整理 电脑文件 文件分类 快速整理文件

并发编程概览-从Lock和Synchronized说起

追风少年

Java 并发编程

☕️【Java 技术之旅】深入分析JDK动态代理的分析(源码深入)

洛神灬殇

Java JVM 动态代理 6月日更

2021上半年1000道大厂高频面试题汇总(Java岗)

Java架构师迁哥

机器学习- 吴恩达Andrew Ng 编程作业技巧 -John 易筋 ARTS 打卡 Week 50

John(易筋)

ARTS 打卡计划

拼搏26天刷完了阿里大佬的Java面试合集1000题,拿到了月薪30K的offer

Java 程序员 架构 面试

计算机专业的应届生想进大厂做开发有多难?

Java架构师迁哥

阿里分享:全网最详细的一篇SpringCloud总结

Java架构师迁哥

质量基础设施(NQI)“一站式”服务平台开发搭建

源中瑞-龙先生

NQI 质量基础设施“一站式”

牛掰!阿里首席架构师用7部分讲明白了Java百亿级高并发系统(全彩版小册开源)

Java架构追梦

Java 学习 阿里巴巴 架构 百亿级并发架构设计

去阿里/腾讯/字节面试P7Java岗时,需要掌握哪些技术栈?

Java架构师迁哥

搞定研发知识管理,你的企业就能跑快一步

华为云开发者联盟

知识管理 华为云 devcloud 研发团队 研发知识

助力初创企业加速升级,华为云初创扶持计划微光训练营南京站开营仪式成功举办

科技热闻

云钉一体应用创新:音视频如何带来灵活高效的协同体验

阿里云视频云

阿里云 音视频

一口气了解【2021 阿里云峰会】重磅发布

阿里云视频云

阿里云

IDEA使用

xujiangniao

Java IDEA

QQ春节红包活动如何应对10亿级流量?看看大佬的复盘总结

TakinTalks稳定性社区

活动 系统运维 高并发优化 高可用系统的架构 高可用架构

毕业设计So Easy:基于Java Web学生选课系统

不脱发的程序猿

Java web 毕业设计 学生选课系统

一文讲懂服务的优雅重启和更新

万俊峰Kevin

微服务 web开发 Go 语言 优雅停机

信息流动过程中的聚类问题

Ryan Zheng

Vibration原生扩展示例_语言 & 开发_Adobe_InfoQ精选文章