zoukankan      html  css  js  c++  java
  • ANE【原创】FlexMobile Ios/Android 电子罗盘方位角 (二)

    二. Android方位角

    总体思路为: jar + swc + 相关文件 ---adt打包---> ane

    1. Android库

    创建Android项目(可以不要Activity)

    导入FlashRuntimeExtensions.jar包,包所在地址如下图:

    库项目目录如下图:

    根据FlashRuntimeExtensions框架实现逻辑内容:

    获取方位角核心逻辑类OrientationListener实现SensorEventListener:

    View Code
    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

    View Code
    <extension xmlns="http://ns.adobe.com/air/extension/3.1">
      <id>com.yyf.orientation</id>
      <versionNumber>1</versionNumber>
      <platforms>
         <platform name="Android-ARM">
              <applicationDeployment>
                <nativeLibrary>OrientationNative.jar</nativeLibrary>
                <initializer>com.yyf.nativeExtension.OrientationExtension</initializer>
                <finalizer>com.yyf.nativeExtension.OrientationExtension</finalizer>
              </applicationDeployment>
        </platform>
      </platforms>
    </extension>

    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完全相同。

    第一视图代码:

    View Code
    <?xml version="1.0" encoding="utf-8"?>
    <s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
            xmlns:s="library://ns.adobe.com/flex/spark" 
            title="主页视图"
            creationComplete="view1_creationCompleteHandler(event)">
        <s:layout>
            <s:VerticalLayout/>
        </s:layout>
        <fx:Script>
            <![CDATA[
                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; 
                } 
                
            ]]>
        </fx:Script>
        <fx:Declarations>
        </fx:Declarations>
        <s:VGroup>
            <s:Label id="lbl"/>
            <s:TextInput id="t1" />
        </s:VGroup>
    </s:View>

    (源代码文章最后提供下载)

    三. 源码下载

    必须用真机测试,源码下载地址:

    Android库项目:

    https://files.cnblogs.com/loveFlex/OrientationNative.rar

    ActionScript库项目:

    https://files.cnblogs.com/loveFlex/Lib_Orientation.rar

    Demo示例程序:

    https://files.cnblogs.com/loveFlex/Eg_1.rar

    ANE打包文件夹:(包含jar、swc、ane)

    https://files.cnblogs.com/loveFlex/Package_ANE_Android_Orientation.rar

    原创作品,欢迎点评,欢迎转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
    作者:binyy

    有问题可以联系我,3Q~

  • 相关阅读:
    Golang Failpoint 的设计与实现
    没涉及到最值求解;观点:矩阵乘法无法表达出结果。 现实生活中事件、现象的数学表达
    多元微分学 枚举破解15位路由器密码 存储空间限制 拆分减长,求最值 数据去重
    ARP Poisoning Attack and Mitigation Techniques ARP欺骗 中间人攻击 Man-In-The-Middle (MITM) attack 嗅探 防范 Can one MAC address have two different IP addresses within the network?
    The C10K problem
    HTTP Streaming Architecture HLS 直播点播 HTTP流架构
    现代IM系统中消息推送和存储架构的实现
    现代IM系统中的消息系统架构
    长连接锁服务优化实践 C10K问题 nodejs的内部构造 limits.conf文件修改 sysctl.conf文件修改
    doubleclick cookie、动态脚本、用户画像、用户行为分析和海量数据存取 推荐词 京东 电商 信息上传 黑洞 https://blackhole.m.jd.com/getinfo
  • 原文地址:https://www.cnblogs.com/loveFlex/p/2610391.html
Copyright © 2011-2022 走看看