位置: 编程技术 - 正文

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

  • 缴纳房产税怎么记账
  • 税务师税法一税法二区别
  • 增值税留抵抵欠税政策解读
  • 建筑行业增值税税负率一般控制在多少合适
  • 其他应收款有哪些情况
  • 开具3%增值税发票
  • 需要预缴增值税
  • 个人去税局开劳务费需要注意什么
  • 注册资金印花税是资金账簿吗
  • 2018一般纳税人印花税减半吗
  • 预付油卡怎么入账
  • 电子发票没有发票号码是怎么回事
  • 对公账户长期不用怎么收费
  • 关于小微企业的规定
  • 增值使用费可取消吗?
  • win10ie浏览器没有internet选项
  • 华为正式发布鸿蒙官网
  • 如何编制处置固定资产
  • 土地使用税从价和从租计算有区别吗
  • 出口视同内销的账务处理?
  • 航天税控服务费
  • 如何设置win10电脑开机不黑屏
  • 事业单位年末收入怎么算
  • 公司收到的应收股利需要分配利润吗
  • 使用mac什么意思
  • 电子发票怎样进入查验
  • 企业间实物交易是指
  • 为什么老是跳到别的网站
  • php 堆排序
  • 货物运输业的增值税税率
  • 租入固定资产改良支出属于资本性支出吗
  • 扣缴义务人的法律地位
  • 企业销售不动产增值税税率
  • html简单的游戏
  • framework 开发
  • 【深度学习】目标检测的性能评价指标,mAP_0.5,mAP_0.5,0.95,0.05
  • python3.9怎么清屏
  • 住房公积金的账号怎么查询
  • 进项税额计入其他流动资产
  • 产权转移书据是什么印花税
  • 年底应交增值税销项税额要结平吗
  • 社保为什么单位缴费是0什么时间才正常
  • 政府奖励金怎么发放
  • 仓库到仓库贸易术语
  • 技术服务行业增值税税负率
  • 2020发票丢失新规
  • 会计计量属性主要包括()
  • 购建时间是什么意思
  • 在mysql中使用什么语句来查询数据
  • jquery常用的事件绑定函数有哪些
  • sqlserver2000数据库文件在哪个文件夹
  • 注册表修改后如何生效
  • linux中链接
  • KunlunPlatform.exe是什么进程?KunlunPlatform.exe是安全的程序吗?
  • mac os 如何备份
  • linux启动u盘制作
  • centos7tar解压
  • centos7怎么修改用户权限
  • win8 系统设置
  • ubuntu搭建安卓环境
  • unity判断点击ui
  • opengl 生成图片
  • ghost参数设置
  • Python实现mysql数据库更新表数据接口的功能
  • jQuery Easyui datagrid editor为combobox时指定数据源实例
  • css如何用
  • bootstrap基础教程 源代码
  • jquery操作table
  • 安卓手机root后更流畅吗
  • python利用while循环求1+2+3......+n的和
  • 开发板io口在哪
  • node的express
  • python迭代算法举例
  • javascript中array的正确写法
  • 实用js代码
  • 非税收入发票盖什么章
  • 减免性质代码是什么意思
  • 车船税完税凭证去哪里打印
  • 税务部门立足
  • 服务类发票 如何入账
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设