位置: 编程技术 - 正文

关于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 入门开发

  • 第四季度所得税没有计提怎么做账
  • 免税收入怎么做会计分录
  • 微信企业版支付
  • 销售人员购买的产品
  • 小规模免哪些税
  • 零售行业的销售员有加班费吗
  • 收到理财产品收益分录
  • 收到个税返还计入成本吗
  • 城市垃圾处理费怎么申报
  • 企业不动产如何带抵押转让
  • 暂估运费成本的账务处理
  • 一般纳税人交的增值税可以抵扣吗
  • 发票和款未付可以抵扣吗
  • 小型微利企业的企业所得税优惠政策
  • 固定资产少计提了怎么办
  • 怎样才能防止臭虫在卧室里呢
  • 存货跌价准备是谁的备抵账户
  • 在windows7中用来存放硬盘中被删除的文件或文件夹的是
  • 清除文件夹exe病毒工具
  • MacOS bigsur11.2连击缩放窗口功能怎么关闭或开启?
  • 金融负债的范围
  • lsm.exe是什么程序
  • php splqueue
  • 斋普尔的景点
  • 加计扣除账务处理
  • 来料加工企业转型是转成两个企业吗
  • node js 安装
  • php获取指定日期的星期几的方法是
  • net python
  • 帝国cms使用手册
  • 一定要确认收入的时候才能开票吗
  • 研发支出相关科目
  • 什么是合伙企业?它的特点有哪些?
  • java守护线程和普通线程jvm区别
  • 停工损失会计科目
  • 报税是按照实际收入还是开票
  • 仓库出入库账本怎么做
  • 微信收款和支付宝收款有啥区别
  • 普通征税差额征税和减按征税
  • 计提附加税费是什么意思
  • 未付货款尾款会计分录
  • 公司健身器材使用制度
  • 其他业务收入怎么申报增值税
  • 施工单位结算
  • 没收租赁保证金要交增值税么
  • 可供分配的利润是什么意思
  • 社保滞纳金可以免除吗
  • 转账支票需要知道开户行吗
  • 一般纳税人月销售额10万以下
  • 合并两公司的帐务处理
  • 建筑工程行业前景
  • 还没有开业的公司怎么样
  • sql server数据存放位置
  • mysql的分页语句
  • win8打开屏幕键盘
  • 红石玩家入门
  • linux详解
  • 简介linux系统中的10个常用命令及功能
  • 什么叫linux
  • setlang.exe - setlang是什么进程 有什么用
  • vs图片简单
  • 网站备份是什么意思
  • win7如何整理磁盘
  • 凭据管理器 win10
  • win10预览版21301bug
  • node.js server-side
  • linux查看多线程
  • 每天看30分钟手机可以吗
  • unity3d颜色
  • nodejs如何配置环境变量
  • JavaScript获取网址之后跳转
  • nodejs gyp
  • JavaScript中字符串模板
  • 浅谈python中的实例方法、类方法和静态方法
  • js写后端用什么框架
  • jquery移动版
  • 水利建设基金的计提与会计处理
  • 免税开普票还是专票
  • 江宁市民中心周末可以办户口吗?
  • 深圳电子税务局入口
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设