位置: 编程技术 - 正文

关于Air端与android端的通信实现

编辑:rootadmin
最近看到很多关于Air、android、Ane的帖子,很多都是在提air和android直接的调用、通信的问题。事实上,在我们使用air进行android开发时,两端之间的通信是十分必要的。废话不多说,直接上教程。PS:该教程的案例是实现,从Air端向Android端传递linux命令,在Android端执行完成后,将结果再传递会Air端。一、Air程序向android程序的通信、传参:这一步的实现,我们使用ANE作为中介。ANE详细怎么写这里就不多说了,随便百度一下超多教程。1、ANE——as代码:public class MyExtension{ public function launchAppExtension(packetName:String,operation:String,args:Array=null):String{ if(_context){ if(!args||!args.length){ return _context.call(LAUNCH_APP_FUNCTION,packetName,operation) as String; } var allArgs:Array = [LAUNCH_APP_FUNCTION,packetName,operation].concat(args); _context.call.apply(this,allArgs); } return "err"; }}复制代码这里我们Ane里面自己写的一个传参、启动应用的方法MyExtension.getInstance().launchAppExtension(packetName:String,operation:String,args:Array=null).复制代码2、Air程序:opertation = "exeCmd";commands = "pm enable com.android.browser";MyExtension.getInstance().launchAppExtension("com.myActivity",opertation,[commands]);复制代码这里调用Ane的方法launchAppExtension(packetName:String,operation:String,args:Array=null).其中:"com.myActivity"——是要与Air通信、接收参数的Android程序的包名,opertation ——是在android程序的处理行为(只是一个标示),这里的处理行为是"exeCmd"——执行命令。[commands] —— 是给予opertation处理行为带上的参数、属性,这里指的是要执行的linux命令 —— 禁用浏览器"pm enable com.android.browser";。3、ANE——java代码:public FREObject call(FREContext arg0, FREObject[] arg1) { // TODO Auto-generated method stub FREObject result = null; try { result = FREObject.newObject("ok"); Activity a = arg0.getActivity(); PackageManager pm = a.getPackageManager(); Intent intent = pm.getLaunchIntentForPackage(arg1[0].getAsString()); intent.putExtra("operation", arg1[1].getAsString()); for (int i = 2; i < arg1.length; i&#;&#;) { FREObject freObject = arg1; intent.putExtra("key"&#;(i-1), freObject.getAsString()); } a.startActivity(intent); } catch (Exception e) { // TODO: handle exception try { result = FREObject.newObject("ERR"); } catch (Exception e2) { // TODO: handle exception } } return result;}复制代码这段代码是写在ANE的java端的,会ANE应该都能看懂,就是将MyExtension.getInstance().launchAppExtension("com.myActivity",opertation,[commands]) 这个方法传递过来的3个参数进行处理,通过startActivity启动"com.myActivity",并将opertation = "exeCmd"存到opertation —— intent.putExtra("operation", arg1[1].getAsString());并将commands = "pm enable com.android.browser"存到key —— intent.putExtra("key"&#;(i-1), freObject.getAsString());4、Android程序:public class MyActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { Bundle bundle = getIntent().getExtras(); if(bundle.getString("operation").equalsIgnoreCase("exeCmd")){ try{ ExecuteAsRoot root = new ExecuteAsRoot(); ArrayList<String> list = new ArrayList<String>(); list.add(bundle.getString("key1")); root.setCommands(list); root.execute(); } catch (Exception e) { // TODO: handle exception } finish(); return; }}复制代码到这里,Air程序向android程序的通信、传参就结束了,里面用到的ExecuteAsRoot是自己写的一个执行linux命令类,是通过Process和DataOutputStream实现的,比较简单,网上也很多教程,这里就不展开了。小结:Air程序向android程序的通信、传参看起来比较复杂(事实上也比较复杂),其实明白之后思路是比较简单的,也可能是因为本人是第一次写教程贴,写得比较啰嗦。下面简单给出这个阶段的通信流程吧:Air程序 —> Ane(As端) —> Ane(java端) —> Android程序二、android程序向Air程序的通信、传参:1、Air程序:NativeApplication.nativeApplication.addEventListener(InvokeEvent.INVOKE, onInvoke);复制代码首先,这里使用InvokeEvent事件做一个调用Air时触发的监听private function onInvoke(e:InvokeEvent):void { if(e.arguments.length>0){ var uv:URLVariables = new URLVariables((e.arguments[0] as String).split("//")[1]); if(uv.hasOwnProperty("resulet")){ trace("接收成功"); } }}复制代码这里可以看到我们使用了URLVariables这个类接收参数,其实待会我们要在android程序中使用的启动Air程序、传参方法就是通过URI实现的,所以这里还要在Air程序的xml中做一下简单的配置,添加<data android:scheme="myAirApp"/> 这一句:<manifest android:installLocation="auto" android:hardwareAccelerated="true"> <application> <activity android:launchMode="singleInstance"> <intent-filter> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.BROWSABLE"/> <category android:name="android.intent.category.DEFAULT"/> <data android:scheme="myairapp"/> </intent-filter> </application></manifest>复制代码其实就是给我们的Air程序一个唯一的URI标识<data android:scheme="myairapp"/>,这种配置方式貌&#;是从Android的AndroidManifest.xml延伸过来的,详细的介绍可以在百度搜一下"AndroidManifest.xml文件详解"学习一下。2、Android程序:private void sendResult(String result){ Intent i; try { i = Intent.parseUri(" i.addCategory(Intent.CATEGORY_BROWSABLE); i.setComponent(null); i.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN); startActivity(i); } catch (URISyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); }}复制代码这个方法是将执行结果传递回Air程序中,就是通过刚才我们在Air配置的数据位置标识URI —— " uri, int flags)的解释 —— "Create an intent from a URI. ",然后下面也是调用startActivity(i),也就是说这是启动一个Activityd的另一种方法 —— 通过URI启动 (说多了,也是属于Android原生的东西了)。这里的 i = Intent.parseUri(" onInvoke);复制代码监听到,然后就会到了我们的第一步:...if(uv.hasOwnProperty("resulet")){ trace("接收成功"); }...复制代码到这里,android程序向Air程序的通信、传参就结束了。小结:这个流程起到关键作用的是两个地方,一个是Air端的InvokeEvent.INVOKE事件监听,另一个则是Android端的Intent.parseUri()启动方法。下面给出这个阶段的通信流程吧:Android程序 —> Air程序总结:流程我搅得是比较简单的(其实大家明白的事都说是简单的),Air和Android的交互对于我们用Air开发android的人来说其实是很常用的,以上给出的只是我在开发项目中使用到的一个"手段"。这段流程我们也想过将它优化,所以如果有很好方法的大神,希望我们能交流分享。写得手都麻了,希望对大家有用吧......

推荐整理分享关于Air端与android端的通信实现,希望有所帮助,仅作参考,欢迎阅读内容。

关于Air端与android端的通信实现

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

Xamarin.Android 入门开发 一,HelloWorld这个阶段主要完成目标:Xamarin价收费标准考察和分析。Xamarin.Android部署安装。第一个Xamarin.Android工程HelloWorld,熟悉Android工程新建、运行、

Android:采用SAX解析XML的原理 SAX是一个解析速度快且占用内存少的xml解析器,非常适合Android等移动设备。它并不需要解析完整个文档,在按内容顺序解析文档的过程中,SAX会判断当

android开发之Monkey测试_自动化测试_看看你的应用够不够健壮 上篇提到让应用自动抓取Crash日志提交到服务器,如果发布之前没有经过严格测试(个人练手做的一些小应用),会发现有很多异常都是显而易见的错误

标签: 关于Air端与android端的通信实现

本文链接地址:https://www.jiuchutong.com/biancheng/379684.html 转载请保留说明!

上一篇:android Lollipop(5.0)--touch feedback(触摸反馈)

下一篇:Xamarin.Android 入门开发

  • 劳务派遣公司差额征税的账务处理
  • 小规模免税收入账务处理
  • 一般纳税人开具专票和普票的区别
  • 库存现金账务处理
  • 小规模纳税人不允许开具零税率发票
  • 房产企业土地增值税税率
  • 项目规划设计费用取费标准
  • 摊销保险费会计分录怎么写
  • 少数股东权益如何保障
  • 无形资产出租后还要摊销吗
  • 去年的原材料发票能入账吗
  • 房屋租赁发票是什么意思
  • 企业未实际列支教育经费要纳税调整吗?
  • 外籍个税起征点
  • 代收代付差额征税
  • 园林工程的范围包括哪些?
  • 小规模租赁收入申报流程
  • 企业开业装修费用分录
  • 公司房产税如何征收税率
  • vue播放器
  • 会计准则和会计法的关系
  • 合并报表长投和所有者权益抵消的原理
  • macbookpro怎么安装双系统
  • 股东借钱给公司怎么写借条
  • linux的系统设置在哪
  • RuntimeError: CUDA out of memory 已解决
  • 纳税评估一般程序包括
  • 银行罚息可不可以扣除
  • 偏食和挑食会有什么不良后果?
  • 镶嵌在巨石之间的英文
  • 个体工商户使用个人二维码收款违法吗
  • 一键部署源码
  • 如何使用rank函数排名
  • 一般户需要做账报税吗
  • 广告合同印花税税目怎么填
  • mongodb 入门
  • 健身房注册公司能注册医疗吗?
  • 无形资产摊销年限
  • sql怎么搜索表
  • 所得税费用需要结转损益吗
  • 限定性资产的限定条件包括
  • 管理费用漏记了跨年调整
  • 物流辅助服务包含哪些内容
  • 机票电子行程单查询
  • 购货方收到销售方提供的发票怎么做分录
  • 减免的残保金怎么做分录
  • 费用误计入固定资产
  • 房屋租赁违约金怎么规定
  • 顾客办理会员卡要怎么做账?
  • 什么叫摊销
  • 律师事务所日语助理
  • 收到发票税点计入什么科目
  • mysql查看当前执行的sql
  • windows10取消fn功能键
  • 回顾30年的水文模型参数率定研究
  • win10系统无法打开这个应用
  • 晨枫U盘启动工具v2.0
  • WIN7系统如何设置自动关机
  • 人脉系统
  • linux dfs
  • win7系统如何修改ip地址
  • linux常用性能监控命令
  • win7系统怎么启用本地连接
  • windows8.1版本区别
  • cocos2dx菜鸟教程
  • Java中string类型比较大小
  • Interlnk、Intersvr、Qbasic命令的使用方法
  • 全国哀悼日的意义
  • jquery input checked
  • node.js 开发工具
  • js新开一个窗口
  • javaweb开发技术有哪些
  • jquery悬浮窗
  • listview item
  • 湖北省电子税务局新版登录操作简介
  • 黑龙江电子税务局
  • 电子税务局怎么添加开票员
  • 电子发票和普通发票哪个好
  • 供给决定需求,需求影响供给
  • 上海市嘉定区税务局电话号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设