位置: 编程技术 - 正文

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

  • 企业收到财政局退款需要开票吗
  • 个税全员全额扣缴申报指什么
  • 软件公司企业成本预测
  • 发票几个月内可以红冲作废
  • 营改增之前
  • 取得成本发票
  • 医院减免医药费后还可以报保险吗
  • 18年补交17年城建税会计分录
  • 小规模纳税人可以转为一般纳税人吗?
  • 企业拨缴工会经费申报后税务机关需要审核吗
  • 增值税如何确认
  • 物业收取的滞纳金怎么算
  • 或有负债可以是现时义务吗
  • 对公工行证书收入摘要写什么
  • 其他综合收益的含义
  • 建筑服务简易征收可以开专票吗
  • 五金配件做什么科目
  • 结转本月销售成本的会计分录
  • 固定资产无偿转让程序是什么
  • 免税不能开专票
  • 报销冲销借款
  • 电脑没有声音问题
  • 保险公司报销工伤手续需要哪些手续
  • 营改增会计分录
  • 会计分录的方法与步骤
  • 高新技术企业如何在电子税务局备案
  • php类型转换的两种方法
  • 纳税人跨县(市、区)提供建筑服务,应向建筑服务发生地
  • php加载mysql
  • 低值易耗品是怎样的
  • 股东无偿投入的土地需要摊销吗
  • 总账是按年还是按月结账
  • vue子组件获取dom元素的方法
  • vuex和bus
  • cmd 过滤命令
  • 营业外收入账务处理方法
  • 递延所得税资产和递延所得税负债
  • 增值税发票记账联用途
  • SQL Server 2005 镜像构建手册(sql2005数据库同步镜像方案)
  • 增值税税务检查
  • 哪些员工出差的多
  • 高新技术企业支付特许权使用费
  • 异地预缴增值税后本地怎么申报
  • 向投资者发放现金红利
  • 交易性金融资产的账务处理
  • 附加税的计税依据是增值税实际缴纳税款吗
  • 押金是否可以抵扣租金
  • 公司车辆交强险怎么网上买
  • 货物运费是否计入成本
  • 承租人和共同承租人
  • 招标付款条件及比例
  • 如何查询公司经营异常
  • mysql57解压缩安装教程
  • mysql日期字段
  • centos 7.5 7.6
  • win8/10whql
  • ubuntu20.04.1安装
  • win7修改系统版本
  • win10阻止可能不需要的应用吗
  • win10一直弹werfault,程序也打不开
  • windowsxp资源管理器在哪里
  • win 10文件
  • xp系统提升性能
  • 解决出现的问题下一句,欢迎的语气
  • 简单阐述javascript的主要作用
  • c++服务器与客户端连接
  • unity3d,C#使用sqlite作为数据库解决方案思路
  • python复制文件内容
  • unity find references in scene
  • 有关中秋节的古诗
  • js新开一个窗口
  • python如何自动化
  • 使用jquery实现的项目
  • javascript获取复选框的值
  • 税务局的前身是什么
  • 股权转让申报期限
  • 广告行业税率6%包含的内容
  • 北京住房公积金最高限额
  • 计提消费税的会计分录讲解
  • 安徽省纪检监察官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设