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. Hive权限介绍

    一.开启权限 眼下hive支持简单的权限管理,默认情况下是不开启.这样全部的用户都具有同样的权限.同一时候也是超级管理员.也就对hive中的全部表都有查看和修改的权利,这样是不符合一般数据仓库的安全原 ...

  2. 块设备驱动之NAND FLASH驱动程序

    转载请注明出处:http://blog.csdn.net/ruoyunliufeng/article/details/25240909 一.框架总结 watermark/2/text/aHR0cDov ...

  3. 手把手教你Android来去电通话自动录音的方法

    我们在使用Android手机打电话时,有时可能会需要对来去电通话自动录音,本文就详细讲解实现Android来去电通话自动录音的方法,大家按照文中的方法编写程序就可以完成此功能. 来去电自动录音的关键在 ...

  4. iOS开发——UI篇OC篇&SpriteKit详解

    SpriteKit详解 SpriteKit,iOS/Mac游戏制作的新纪元 这是我的WWDC2013系列笔记中的一篇,完整的笔记列表请参看这篇总览.本文仅作为个人记录使用,也欢迎在许可协议范围内转载或 ...

  5. iOS开发——面试笔试精华(三)

    面试笔试精华(三) 1.        When to use NSMutableArray and when to use NSArray? 什么时候使用NSMutableArray,什么时候使用N ...

  6. android学习日记15--WebView(网络视图)

    一.WebView 1.简述 WebView(网络视图)内置WebKit引擎,能加载显示网页,还支持JS,并且能够在Android平台使用AJAXWebView可以在布局中声明,也可以在Activit ...

  7. android123 zhihuibeijing 新闻中心-新闻 页签 ViewPagerIndicator实现

    ## ViewPagerIndicator ## 使用导入ViewPagerIndicator库的方式相当于可以改源码,打包编译Eclips可以自动完成. ViewPager指针项目,在使用ViewP ...

  8. Zend Studio 10正式版注册破解

    1.文件和汉化文件 ZendStudio官方下载地址:http://www.geekso.com/component/zendstudio-downloads/ 百度云地址: 10.0.0.msi文件 ...

  9. git svn 5点区别

    如果你在读这篇文章,说明你跟大多数开发者一样对GIT感兴趣,如果你还没有机会来试一试GIT,我想现在你就要了解它了. GIT不仅仅是个版本控制系统,它也是个内容管理系统(CMS),工作管理系统等.如果 ...

  10. mysql:慢查询日志slow_query_log

    1.慢查询日志:当查询超过一定的时间没有返回结果的时候,才会记录到慢查询日志中.默认不开启.采样的时候手工开启.可以帮助DBA找出执行慢的SQL语句 2.常用的参数详解: 注意:修改以下参数,需要重新 ...