ANE【原创】FlexMobile Ios/Android 电子罗盘方位角
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调用,但是不支持AndroidGeolocationEvent 事件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));
s.append("&").append(Float.toString(evt.values)).append("&").append(Float.toString(evt.values));
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:应用程序中将会试用此idplatform:平台类别 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库项目:http://files.cnblogs.com/loveFlex/OrientationNative.rarActionScript库项目:http://files.cnblogs.com/loveFlex/Lib_Orientation.rarDemo示例程序:http://files.cnblogs.com/loveFlex/Eg_1.rarANE打包文件夹:(包含jar、swc、ane)http://files.cnblogs.com/loveFlex/Package_ANE_Android_Orientation.rar
原创作品,欢迎点评,欢迎转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
http://www.cnblogs.com/loveFlex/archive/2012/07/26/2610391.html
作者:binyy
有问题可以联系我,3Q~
页:
[1]