位置: 编程技术 - 正文

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

  • 电子税务局如何删除办税人员
  • 出库成本是什么意思
  • 对公账户是不是实时到账
  • 投资收益和公允价值变动的区别
  • 单位部分承担个人借款利息个税的计算
  • 分公司办理税务需要什么东西
  • 供应商发出货物,将发货单提交给
  • 并购对利润的影响
  • 当月发票已认证还能作废吗
  • 别人垫付的医药费,可以报销吗
  • 企业转企业对公账户
  • 交通违章罚款有优惠吗
  • 交易性金融资产的交易费用计入哪里
  • 没有运输经营范围能不能开运输发票
  • 税收奖励计入什么科目
  • 进口商品合同
  • 存货周转次数计算公式怎么理解
  • 消费税的纳税义务人
  • 城市地下建设
  • 非正常损失和非正常损耗的区别
  • 带息的应付票据计算的利息计入财务费用
  • 金蝶核算项目明细表
  • 企业职工福利有哪些
  • 电脑非法关机后开机进不了系统
  • win7系统咋样
  • php数组可以使用哪些键名
  • 广电默认网关是多少
  • 分期收款销售商品,收到本期货款50万元
  • 出差补贴如何入账报销
  • pytorch :OSError: [WinError 1455] 页面文件太小,无法完成操作。 Error loading 【已解决】
  • html可以描述什么
  • vue实现简易购物车
  • apache php mysql开发环境安装教程
  • PHP Ajax JavaScript Json获取天气信息实现代码
  • 百旺开票软件状态查询在哪里
  • 建筑劳务公司适应什么工程
  • 劳务公司成本怎么算
  • 机关单位差旅费
  • java中file的用法
  • uniapp组件使用
  • wordpress禁止更新插件
  • 先弥补亏损还是先分配利润
  • 个体工商户生产经营所得税税率表
  • 固定资产进项留存怎么算
  • 物业管理费专票税率是多少
  • 无资产可执行啥意思
  • 生育津贴是否需要缴纳增值税
  • 通行费电子发票进项税额如何填报
  • 长期借款已经还了怎么办
  • 固定资产变动方式对应科目
  • 社保逾期滞纳金和利息
  • 电子承兑汇票是24小时签收吗
  • 企业如何运用内部招募
  • 个人转到公司账上的钱能开发票吗
  • 营利性养老院都交哪些税
  • 缴纳工会经费如何记账
  • 在linux系统中,用来存放系统所需要的配置文件和子目录
  • freebsd6.2 nginx+php+mysql+zend系统优化防止ddos攻击
  • freebsd9.3安装教程
  • 教大家如何重做作业
  • webinstall.exe - webinstall是什么进程
  • win10系统无法运行exe文件
  • winxp系统修复 不重装软件
  • nod32kui.exe - nod32kui是什么进程 作用是什么
  • windows 相机打不开
  • win10开机出现microsoft
  • win7打印无反应
  • ug语法错误
  • jquery移动端ui
  • vue.js如何使用
  • 给一个接口,然后怎么在vue里面调用
  • unity 5.4
  • php守护进程的应用场景
  • 事件的分发与传播的关系
  • 自然人办税服务平台怎么登录不进?
  • 北京税务报到期限
  • 进项名称和销项同一产品不同称呼
  • 盐城企退人员养老金调整新标准
  • 竣工开始缴房产税吗
  • 城市维护建设税减半征收政策
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设