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~

  • 相关阅读:
    关于使用quartz动态增删改定时任务
    关于chrome被篡改主页修复方法
    关于git被误删除的分支还原问题
    mysql数据库备份bat脚本
    同步数据库bat脚本
    读取spring boot项目中resource目录下的文件
    使用Java进行udp-demo编程时碰到的consumer和producter无法连接并报出“java.net.SocketException: Can't assign requested address”问题
    关于在项目中遇到MySQL数据库死锁的问题
    Gitlab仓库搭建及在Linux/windows中的免密使用
    GIT
  • 原文地址:https://www.cnblogs.com/loveFlex/p/2610391.html
Copyright © 2011-2022 走看看