Binyy Wuhan

i love Flex i come from Wuhan

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

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

 

 

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

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

 

 

 

 

 

posted on   Binyy_Wuhan  阅读(2851)  评论(1编辑  收藏  举报

编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示