破晓 发表于 2015-1-25 19:48:04

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]
查看完整版本: ANE【原创】FlexMobile Ios/Android 电子罗盘方位角