守望者--AIR技术交流

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

搜索
热搜: ANE FlasCC 炼金术
查看: 2655|回复: 0
打印 上一主题 下一主题

[入门技术] ANE【原创】FlexMobile Ios/Android 电子罗盘方位角

[复制链接]
  • TA的每日心情
    擦汗
    2018-4-10 15:18
  • 签到天数: 447 天

    [LV.9]以坛为家II

    1742

    主题

    2094

    帖子

    13万

    积分

    超级版主

    Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

    威望
    562
    贡献
    29
    金币
    52903
    钢镚
    1422

    开源英雄守望者

    跳转到指定楼层
    楼主
    发表于 2015-1-25 19:48:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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(不是数字)。
    调用代码:
    1. if (Geolocation.isSupported){

    2.   var geo:Geolocation = new Geolocation();

    3.   geo.addEventListener(GeolocationEvent.UPDATE,function(event:GeolocationEvent):void{

    4.     trace("heading ---> " + event.heading);//方位角

    5.   });

    6. }
    复制代码
    二. Android方位角
    总体思路为: jar + swc + 相关文件 ---adt打包---> ane


    1. Android库

    创建Android项目(可以不要Activity)
    导入FlashRuntimeExtensions.jar包,包所在地址如下图:



    库项目目录如下图:



    根据FlashRuntimeExtensions框架实现逻辑内容:
    获取方位角核心逻辑类OrientationListener实现SensorEventListener:
    1. package com.yyf.nativeExtension;

    2. import android.hardware.Sensor;
    3. import android.hardware.SensorEvent;
    4. import android.hardware.SensorEventListener;
    5. import android.util.Log;

    6. public class OrientationListener implements SensorEventListener {

    7.     private OrientationExtensionContext ctx;

    8.     public OrientationListener(OrientationExtensionContext ctx) {
    9.         this.ctx = ctx;
    10.     }

    11.     @Override
    12.     public void onAccuracyChanged(Sensor arg0, int arg1) {
    13.         // TODO Auto-generated method stub
    14.     }

    15.     @Override
    16.     public void onSensorChanged(SensorEvent evt) {

    17.         if (ctx != null) {
    18.             
    19.             StringBuilder s = new StringBuilder(Float.toString(evt.values[0]));

    20.             s.append("&").append(Float.toString(evt.values[1])).append("&").append(Float.toString(evt.values[2]));

    21.             Log.i("OrientationListener", s.toString());

    22.             ctx.dispatchStatusEventAsync("CHANGE", s.toString());

    23.         }
    24.     }

    25.     public void dispose() {
    26.         Log.i("OrientationListener", "dispose");
    27.         this.ctx = null;
    28.     }

    29. }
    复制代码
    (源代码文章最后提供下载)


    2. ActionScript库

    此swc库负责和Android代码交互并面向As开发提供接口
    库项目目录如下图:


    具体实现看源码
    这里要提的是途中框出的文件extension.xml

    1.   com.yyf.orientation
    2.   1
    3.   
    4.      
    5.          
    6.             OrientationNative.jar
    7.             com.yyf.nativeExtension.OrientationExtension
    8.             com.yyf.nativeExtension.OrientationExtension
    9.          
    10.    
    11.   
    复制代码
    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完全相同。

    第一视图代码:

    1. <s:view xmlns:fx="http://ns.adobe.com/mxml/2009"
    2.         xmlns:s="library://ns.adobe.com/flex/spark"
    3.         title="主页视图"
    4.         creationComplete="view1_creationCompleteHandler(event)">
    5.    
    6.         
    7.    
    8.    
    9.                     import com.yyf.nativeExtensions.Orientation;
    10.             import com.yyf.nativeExtensions.OrientationEvent;
    11.             
    12.             import mx.events.FlexEvent;

    13.             private var g1:Orientation = null;
    14.             
    15.             protected function view1_creationCompleteHandler(event:FlexEvent):void
    16.             {
    17.                 trace("I am rotate...");
    18.                 trace(Orientation.isSupported);
    19.                 lbl.text = Orientation.isSupported.toString();
    20.                 if(Orientation.isSupported)
    21.                 {
    22.                     g1 = new Orientation();
    23.                     g1.addEventListener(OrientationEvent.UPDATE,onChange1);
    24.                     
    25.                 }else{
    26.                     trace("no orientation");
    27.                 }
    28.             }
    29.             
    30.             private function onChange1(e:OrientationEvent):void{
    31.                 trace("From o1: " + e.x + " " + e.y + " " + " " + e.z);
    32.                 t1.text = e.x + " " + e.y + " " + " " + e.z;
    33.             }
    34.             
    35.         ]]>
    36.    
    37.    
    38.    
    39.    
    40.         
    41.         
    42.    
    复制代码
    (源代码文章最后提供下载)


    三. 源码下载

    必须用真机测试,源码下载地址:
    Android库项目:
    ActionScript库项目:
    Demo示例程序:
    ANE打包文件夹:(包含jar、swc、ane)


    原创作品,欢迎点评,欢迎转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
    http://www.cnblogs.com/loveFlex/archive/2012/07/26/2610391.html
    作者:binyy
    有问题可以联系我,3Q~





    本帖子中包含更多资源

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
    收藏收藏 分享分享 支持支持 反对反对 微信
    守望者AIR技术交流社区(www.airmyth.com)
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    
    关闭

    站长推荐上一条 /4 下一条

    QQ|手机版|Archiver|网站地图|小黑屋|守望者 ( 京ICP备14061876号

    GMT+8, 2026-1-24 02:55 , Processed in 0.066000 second(s), 35 queries .

    守望者AIR

    守望者AIR技术交流社区

    本站成立于 2014年12月31日

    快速回复 返回顶部 返回列表