二. 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[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
<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完全相同。
第一视图代码:
<?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
有问题可以联系我,3Q~