|
ANE Air Native Extension 本地拓展 Air程序与本地环境的源生代码交互技术。 这里主要通过获取移动设备电子罗盘数据来剖析ANE技术的运用。
方位角: 相对于正北的移动方向(以整数度为单位)。
=================================== 概述: 一. Ios方位角 二. Android方位角 1. Android库 2. ActionScript库 3. ADT打包 4. Demo程序 三. 源码下载 ===================================
一 Ios方位角 当我在虚拟机中编写Xcode代码碰到CLLocationManager的heading属性时,其实Adobe在Flex API中已经封装了Ios下在方位角数据,实质就是ANE调用,但是不支持Android GeolocationEvent 事件 event.heading 属性 相对于正北的移动方向(以整数度为单位)。 注意:在 Android 设备上,不支持 heading。heading 属性的值始终是 NaN(不是数字)。 调用代码: - if (Geolocation.isSupported){
- var geo:Geolocation = new Geolocation();
- geo.addEventListener(GeolocationEvent.UPDATE,function(event:GeolocationEvent):void{
- trace("heading ---> " + event.heading);//方位角
- });
- }
复制代码二. Android方位角 总体思路为: jar + swc + 相关文件 ---adt打包---> ane
1. Android库
创建Android项目(可以不要Activity) 导入FlashRuntimeExtensions.jar包,包所在地址如下图:
库项目目录如下图:
根据FlashRuntimeExtensions框架实现逻辑内容: 获取方位角核心逻辑类OrientationListener实现SensorEventListener: - package com.yyf.nativeExtension;
- import android.hardware.Sensor;
- import android.hardware.SensorEvent;
- import android.hardware.SensorEventListener;
- import android.util.Log;
- public class OrientationListener implements SensorEventListener {
- private OrientationExtensionContext ctx;
- public OrientationListener(OrientationExtensionContext ctx) {
- this.ctx = ctx;
- }
- @Override
- public void onAccuracyChanged(Sensor arg0, int arg1) {
- // TODO Auto-generated method stub
- }
- @Override
- public void onSensorChanged(SensorEvent evt) {
- if (ctx != null) {
-
- StringBuilder s = new StringBuilder(Float.toString(evt.values[0]));
- s.append("&").append(Float.toString(evt.values[1])).append("&").append(Float.toString(evt.values[2]));
- Log.i("OrientationListener", s.toString());
- ctx.dispatchStatusEventAsync("CHANGE", s.toString());
- }
- }
- public void dispose() {
- Log.i("OrientationListener", "dispose");
- this.ctx = null;
- }
- }
复制代码(源代码文章最后提供下载)
2. ActionScript库
此swc库负责和Android代码交互并面向As开发提供接口 库项目目录如下图:
具体实现看源码 这里要提的是途中框出的文件extension.xml
- com.yyf.orientation
- 1
-
-
-
- OrientationNative.jar
- com.yyf.nativeExtension.OrientationExtension
- com.yyf.nativeExtension.OrientationExtension
-
-
-
复制代码id:应用程序中将会试用此id platform:平台类别 nativeLibrary:源生库名称(这里为Android的jar包,ios为.a) initializer:com.yyf.nativeExtension.OrientationExtension 和Android库项目中路径匹配 finalizer:com.yyf.nativeExtension.OrientationExtension 和Android库项目中路径匹配 (源代码文章最后提供下载)
3. adt打包
新建一个文件夹,文件夹中文件如下图
注意: extension.xml 为ActionScript库中对应的extension.xml文件 anetest.p12为自签名文件,这里也可以不给予签名。
Android-ARM文件夹中内容如下图
注意:catalog.xml节诶library.swf为Orientation.swc解压出来的文件。
adt指令: 注意:如果为配置环境变量,请进入flashbuilder包adt.bat所在的绝对路径
打包指令如下图:
注意:不要忘记最后的 空格 点。 打包成功后将会在同级目录生成com.yyf.orientation.ane文件。
3. Demo程序
导入要使用的ane文件:
导入并引用后,app-xml会自动生成如下代码:
注意:此id要和ActionScript库项目中extension.xml中写的id完全相同。
第一视图代码:
- <s:view xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- title="主页视图"
- creationComplete="view1_creationCompleteHandler(event)">
-
-
-
-
- import com.yyf.nativeExtensions.Orientation;
- import com.yyf.nativeExtensions.OrientationEvent;
-
- import mx.events.FlexEvent;
-
- private var g1:Orientation = null;
-
- protected function view1_creationCompleteHandler(event:FlexEvent):void
- {
- trace("I am rotate...");
- trace(Orientation.isSupported);
- lbl.text = Orientation.isSupported.toString();
- if(Orientation.isSupported)
- {
- g1 = new Orientation();
- g1.addEventListener(OrientationEvent.UPDATE,onChange1);
-
- }else{
- trace("no orientation");
- }
- }
-
- private function onChange1(e:OrientationEvent):void{
- trace("From o1: " + e.x + " " + e.y + " " + " " + e.z);
- t1.text = e.x + " " + e.y + " " + " " + e.z;
- }
-
- ]]>
-
-
-
-
-
-
-
复制代码(源代码文章最后提供下载)
三. 源码下载
必须用真机测试,源码下载地址: Android库项目: ActionScript库项目: Demo示例程序: ANE打包文件夹:(包含jar、swc、ane)
原创作品,欢迎点评,欢迎转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
http://www.cnblogs.com/loveFlex/archive/2012/07/26/2610391.html
作者:binyy
有问题可以联系我,3Q~
|