jar包完成后,剩下就是要构建ANE包来供实际程序调用。

首先要建两个Flex库项目, default那个是官方建议加上的,仅用于不在真实环境下编译调试的时候有个默认接口不至于调用不成功报错,项目结构如下:

首先介绍配置文件extension.xml, 这个是必须的,用于指定平台和接口会直接打到ANE包里。

<extension xmlns="http://ns.adobe.com/air/extension/3.1">
<id>nav.wenbo.service</id>
<versionNumber>0.0.1</versionNumber>
<platforms>
<platform name="Android-ARM">
<applicationDeployment>
<nativeLibrary>libAndroidServiceLib.jar</nativeLibrary>
<initializer>nav.wenbo.service.ServiceExtension</initializer>
</applicationDeployment>
</platform>
<platform name="default">
<applicationDeployment/>
</platform>
</platforms>
</extension>

这里我只配置了Andriod平台,配置的平台都必须在ANE包结构中有对应的目录,如需支持其它平台如iPhone,要加上如下配置

<platform name="iPhone-ARM">
<applicationDeployment>
<nativeLibrary>XXXLib.a</nativeLibrary>
<initializer>XXXExtensionInitializer</initializer>
<finalizer>XXXExtensionFinalizer</finalizer>
</applicationDeployment>
</platform>

接下来,创建ServiceController, 首先是要获取到扩展的上下文.

        private var extContext:ExtensionContext;
public function ServiceController()
{
super();
extContext = ExtensionContext.createExtensionContext( "nav.wenbo.service", "" );//注意这个是要和extensiion里的id对应 if ( !extContext ) {
throw new Error( "service native extension is not supported on this platform." );
}
}

当然,大部分时候会需要本地扩展返回的消息,这里加个监听

extContext.addEventListener( StatusEvent.STATUS, onStatus );

那么,就可以通过这个上下文来调用jar包中的方法。

        public function setNotification($msg:String="hei~ here is a test from wenbo!"):void
{
extContext.call( "send", $msg );
} private function init():void {
extContext.call( "init" );
} public function startAndriodService():void
{
extContext.call( "service", true);
} public function stopAndriodService():void
{
extContext.call( "service", false);
}

完整代码:

package nav.wenbo.service
{
import flash.events.EventDispatcher;
import flash.events.StatusEvent;
import flash.external.ExtensionContext; public class ServiceController extends EventDispatcher
{
private static var _instance:ServiceController;
private var extContext:ExtensionContext;
public function ServiceController()
{
super();
extContext = ExtensionContext.createExtensionContext( "nav.wenbo.service", "" );//注意这个是要和extensiion里的id对应 if ( !extContext ) {
throw new Error( "service native extension is not supported on this platform." );
} extContext.addEventListener( StatusEvent.STATUS, onStatus );
init();
} protected function onStatus(event:StatusEvent):void
{
var lev:String = event.level;
trace("status change");
} public static function get instance():ServiceController
{
if(null == _instance) _instance = new ServiceController;
return _instance;
} public function setNotification($msg:String="hei~ here is a test from wenbo!"):void
{
extContext.call( "send", $msg );
} private function init():void {
extContext.call( "init" );
} public function startAndriodService():void
{
extContext.call( "service", true);
} public function stopAndriodService():void
{
extContext.call( "service", false);
}
}
}

在ServiceLibDefault,直接把ServiceController拷过去,把所有外部引用去掉就可以了。

package nav.wenbo.service
{
import flash.events.EventDispatcher; public class ServiceController extends EventDispatcher
{
private static var _instance:ServiceController;
public function ServiceController()
{
super();
} public static function get instance():ServiceController
{
if(null == _instance) _instance = new ServiceController;
return _instance;
} public function setNotification($msg:String="hei~ here is a test from wenbo!"):void
{
trace( "send", $msg );
} private function init():void {
trace( "init" );
} public function startAndriodService():void
{
trace( "service", true);
} public function stopAndriodService():void
{
trace( "service", false);
}
}
}

下一节,我会介绍把前三节的工作打包成一个ANE包供项目调用。

p: 更多的技术交流 wenbocode@126.com

通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(三)的更多相关文章

  1. 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(一)

    项目组用air来开发手游, 但有些在原生应用里很容易实现的功能没有办法在air中直接调用,比如说震动,服务等等.但Adobe 提供了一种方法让air间接调用本地代码(java,object-c...) ...

  2. 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(二)

    着手改造之前,有兴趣可以阅读下官方文档:http://help.adobe.com/zh_CN/air/extensions/index.html 新建工程 NavService 并创建包 nav.w ...

  3. 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(四)

    这一节,是要把AS库和Android的jar包及相关配置文件打成一个ane包. 首先先建一个build目录,里面文件目录结构如下: 然后用打开压缩包的方式打开ServiceLib.swc, 把其中的l ...

  4. 通过 ANE(Adobe Native Extension) 启动Andriod服务 推送消息(五)

    这一节,用个简单的例子来调用下之前生成的service.ane 首先建一个flex手机项目 然后在构建路径中把ane引进来 可以看到此ane支持Android平台. serviceMobile.mxm ...

  5. 用JPUSH极光推送实现服务端向安装了APP应用的手机推送消息(C#服务端接口)

    这次公司要我们做一个功能,就是当用户成功注册以后,他登录以后要收到消息,当然这个消息是安装了我们的手机APP应用的手机咯. 极光推送的网站的网址是:https://www.jpush.cn/ 极光推送 ...

  6. APNS 服务推送通知

    1. 将app注册notification里面, 并从APNS上获取测试机的deviceToken. - (BOOL)application:(UIApplication *)application ...

  7. 模拟websocket推送消息服务mock工具二

    模拟websocket推送消息服务mock工具二 在上一篇博文中有提到<使用electron开发一个h5的客户端应用创建http服务模拟后端接口mock>使用electron创建一个模拟后 ...

  8. Spring Boot 集成 WebSocket 实现服务端推送消息到客户端

    假设有这样一个场景:服务端的资源经常在更新,客户端需要尽量及时地了解到这些更新发生后展示给用户,如果是 HTTP 1.1,通常会开启 ajax 请求询问服务端是否有更新,通过定时器反复轮询服务端响应的 ...

  9. 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言

    在VisualStudio2010中新建网站JPushAndroid.添加引用json帮助类库Newtonsoft.Json.dll. 在web.config增加appkey和mastersecret ...

随机推荐

  1. Redis实战之征服 Redis + Jedis + Spring (二)

    不得不说,用哈希操作来存对象,有点自讨苦吃! 不过,既然吃了苦,也做个记录,也许以后API升级后,能好用些呢?! 或许,是我的理解不对,没有真正的理解哈希表. 相关链接: Redis实战 Redis实 ...

  2. Centos中安装vim

    Centos, 默认没有安装VIM, 所以要当然要安装了, 直接yum install vim是不行的, 首先: yum install vim* 会看到vim-enhanced这个包,没错, 我们要 ...

  3. BZOJ 1878: [SDOI2009]HH的项链 离线树状数组

    1878: [SDOI2009]HH的项链 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://www.lydsy.com/JudgeOnline/p ...

  4. WCF之初体验

    什么是WCF? WCF的全称是:Windows通信基础(WindowsCommunication Foundation).本质来讲,他是一套软件开发包. WCF和WebService的差别 Webse ...

  5. [HTML5] Input accepts only 6 number characters

    Use 'pattern' tag in html5: <input type="text" pattern="[0-9]{6}" maxlength=& ...

  6. Android使用的开发MediaRecorder录制视频

    MediaRecorder除了使用录制音频.还可用于录制视频.关于MediaRecorder的具体解释大家能够參考<Android开发之MediaRecorder类具体解释>.使用Medi ...

  7. android学习日记23--Android XML解析

    一.简述 XML语言是跨平台,JAVA对XML语言支持得比较好,android系统的应用层平台是JAVA做的,所以用XML.XML解析比较简单.XML解析就是将获取到的数据分离出来,基本的网络数据传输 ...

  8. SAP交货单过账自动生产采购订单、采购订单自动收货入库

    公司间需要买卖操作,由于发货和收货都是同一批人在操作,为了减少业务人员的工作量,提高工作效率,特实现以上功能 1.增强实现:增强点为交货单过账成功时触发,在提交前触发,如果遇到不可预知问题,可能造成数 ...

  9. [012]泛型--lambda表达式捕获

    lambda表达式的捕获跟参数差不多,可以是值或者引用. 1.值捕获 与传值参数类似,采用值捕获的前期是变量可以拷贝:与参数不通透的是:被捕获的变量的值是在lambda创建时拷贝,而不是调用时拷贝. ...

  10. 出栈入栈动画demo

    项目做了一个切换界面动画的功能,用到了出栈入栈的,写了一个demo package com.myron.stackview; import java.util.Stack; import androi ...