版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、建立通讯机制,提供接口给浏览器端,方便 JavaScript 进行调用数据队,以保建立通讯机制,提供接口给浏览器端,方便 JavaScript 进行调用数据队,以保证浏览器端的调用后产生的数据可以回送插件体系的建立,提供整个框架的可扩展性而这三部分的功能对应到代码中则是如下的几个重要的 Java DroidGap、Plugin、因需要依次来了解这几个重要的Java 类的具体实现,这样才可以PhoneGap Android DroidGap 的实完成一个基本的 PhoneGap 的示例后,PhoneGap 进行开发机应用中,第一步就是将继承关系 extend修改为extendsDroidGap。
2、因此,DroidGap 是整个应用开始的地点,首先需要了解 DroidGap 的内容。在源码中可以看到 DroidGap 继承自 PhonegapActivity,而 PhonegapActivity是一个抽象类,继承自Activity,但是具体的实现都是集中在 DroidGap 类中。继续回到 DroidGap 类中,当知道 DroidGap 类也是一个 Acitvity 后,就会明白,DroidGap 在 onCreate 方法中实现了整个类最初的一些操作,代码的实现则集中在 onCreate() 和 init() 这两个方法中,具体的流程PhoneGap honeap 在 ndod上的实
3、现的框是利用了在本地代码和浏览器间建立中间层来实现对 Java 代码的利用浏览器的接口和网络 socket 接实现数据的通讯因此在对 honeap 框的理解上需要从 Java 端和浏览器端两部分来分别学习。关于Android 开发环境和PhoneGap 开发环境的搭建,请参考参考资料中的Java 端介Java 端作调用Android 本地SDK 的接口,主要实现了如下的功能得已经过滤了一些错(reqOk&defaultValue!=null&defaultValue.length()defaultValue.substring(0, 4).equals(gap:) 得已经过滤了一些错(reqO
4、k&defaultValue!=null&defaultValue.length()defaultValue.substring(0, 4).equals(gap:) JSONArraytryarray = new service=array.getString(0); action = array.getString(1);callbackId=async=r = anager.exec(service,action,callbackId,message,catch(JSONExceptione)/PollingforJavaScriptmessages else if .在此, 就可以明白
5、,实现 JavaScript Java JavaScript 利用 prompt 来传递调用信息的数据,在 onJsPrompt 中,重写的方法截获了的调用利用是的Plug anager 类,这将在随后说明在完成WebView 的设置后,再将PhoneGap 和js 绑定,实现js PhoneGap CallbackServer anager 两个类。因此 明LoadUrl 方法也是实现一个 PhoneGap 示例后很熟悉的方法,在 loadUrl 1. 1. 处理、安全验证等等可能会妨对重要的功能实现理解的代码代1.WebView 代1. WebView init() 置 nt。代码中提供了
6、一个继承自nt 的类,重onJsAlert,onJsConfirm,onJsPrompt PhoneGap Java private用于返回状态us 与一个enum 类型相关用于标注插件的执行结果如何private用于返回状态us 与一个enum 类型相关用于标注插件的执行结果如何privatefinalStringanager 的实anager DroidGap Plugin 的插件的联系首先anager 在构造函数中,调用了lugins 方法,该方法负xml 配置文件,对应每个 plugin,调用一次 addService 用于一个 HashMap 来实现,分别保 存 serviceTyp
7、e, claame在成员中有另外一个 HashMap用于实现 claame 和 IPlugin 类的绑定。这样就实现了 serviceType 和 IPlugin 的对应。在 Pluganager 中,执行插件的方法 exec 是主要功能,1. 利用查询之前提到的HashMap service ame 对应起来这就获得了提供功能的插件类的位置通过getClassByName 来获得插件完成类型检测,确定对应的类是一个插件类WebView loadUrl Java UI DroidGapJavaScript prompt 数据。这是实现浏览器端和 Java 端通讯的基础。Plugin 的实Plu
8、gin 是一个抽象类,实现了 IPlugin 接口,PhoneGap 中利用 AndroidSDKPlugin Plugin 本身非常简单,最主要的部分是提供一个 execute 方法,如下:publicabstractPluginResultexecute(Stringaction,JSONArrayargs,Plugin PluginResult 。执行addPlugin 方法,其中。执行addPlugin 方法,其中则将第2 步中获得插件ame 和具体的Plugin 接口的实现绑定,具体的实现就是上文中提到的 HashMap。判断Plugin 是否需要异步执行,再根据情况,选择直接执行或
9、者是完成执行后,得到的数据会根据情况交给 CallbackServer 来处理, anager 会调用 DroidGap 中的 sendJavaScript 来将数据交给 CallbackServer,事实上,DroidGap 中的 sendJavaScript 不过是对 CallbackServer 中的 sendJavaScript 包装,实际调用的是 CallbackServer 中的 sendJavaScript 方法,这涉及到了CallbackServer 类,随后就会说PluginResult to*String String JSON callbackIdjs CallbackS
10、erver 的实CallbackServer 实现了 Runnable 接口具体的功能就是并且建立一个服务器,用于 XHR 的数据传递,对数据的队列的Runnable CallbackServer 方法,run() 首先利用端口,具体端口分配在accept 后则是对HTTP 协议和对应的返回us在验证正确后,利用getJavascript 方法得LinkedList() 中的保js 代码,如果为空则返回null之后就是对队的方法,这时理解之前的sendJavaScript 则很简单,该getJavaScript LinkedList js varcallbackId=service+之后就是对
11、队的方法,这时理解之前的sendJavaScript 则很简单,该getJavaScript LinkedList js varcallbackId=service+ifs|fail)PhoneGap.callbackscallbackId = s,var r = prompt(PhoneGap.stringify(args), gap:+ PhoneGap.stringify(service,action,callbackId,true);/Ifaresultwasif(r.length0)/Ifs ifusisOK,thenreturnvaluebacktous=us.OK)elseif可
12、以看到,调用的是 prompt 在之前特别提到了,PhoneGap 在DroidGap 类中,继承了一ntonJsPromptJava 了浏览器端的调用。现在可以回到之前的 Java 端的说明,查看之前列出综上,CallbackServer XHR SocketServer,一个是对队列的 。而完成 CallbackServer 类的说明后,Java 端的主要功能也都说明完毕。随后会说明浏览器端的说明,在完成浏览器端说明后, 就会明白整个 PhoneGap 框架运行的原理。浏览器端的 JavaScript 代码较多,但是实现其中PhoneGap 类中,其他的都是PhoneGap 框架中自带的一
13、些Plugin 的 JavaScript 代码。在浏览器端,其中一个最重要的函数就是 PhoneGxec 函数,因为大部分的函数调用,最终都会在这里实现与本地 Java 端的数据通讯,转而去调用 Java 端的 Plugin 来实现具体的执行。主要的内容如下,代码 2PhonG xec 4. 这些具string js 代码则socket 作为返回给前端onJsPrompt Java r CallbackServer SocketServer 已经看到了整个数据在浏览器端和 Java SocketServer anager onJsPrompt Java r CallbackServer Soc
14、ketServer 已经看到了整个数据在浏览器端和 Java SocketServer anager execXHR XHR JavaScript 代码初始化 o PhoneGap PhoneGap Android 的基本开发知识,Android 和PhoneGap Plugin Java JavaScript 就此流程来通过一个简单的例子来看一下如何具体的完成Plugin 的实现在 Java Plugin execute 在JavaScript 端要利用现有 xec 来调用具体的 Java PhoneGap PhoneGap.addConstructorJavaScript Java 加,当
15、然直接修改 XML 文件来实现也可以。首先,完成 Java 端的代码实3. Java publicPluginResultexecute(Stringaction,JSONArrayargs,StringcallbackId) us sus = PluginResult.SPluginResult ifr=new elseif(action.equals(saySth) r = new PluginResult(sreturn如果action 的参数是o,则返回字符串o”如果是saySth,则如果action 的参数是o,则返回字符串o”如果是saySth,则args 中的内容之后,完成Jav
16、aScript 代JavaScipt HTML 4. JavaScript totype.saySth=function(msg,callback,fail) return PhoneGxec(function(args) ,function(args)il=function) ,o,saySth,o=function(callback,fail) return PhoneGxec(function(args) ,function(args)il=function) ,o,PhoneGap.addConstructor(function() o, new在这需要有一个特别的说明在上述 JavaScript 代码中,注释了addConstructor 函数中的一行,因为在开发过程中发现这条代码的执行在 Javascript 端没有被实现。在 Java 端实现代码,那么为了实现这段 JavaScript 代码所做的补偿性的 Java 代码要在自己实现的 Java 端的 onCreate 函数中实现,内容是很
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年高二化学选择性必修2(人教版)同步课件 第二章 第一节 第1课时 共价键
- 【+初中语文+】课外古诗词诵读《+送元二使安西+》课件+统编版语文六年级(五四学制)上册
- 广东省佛山市南海区九江镇儒林实验学校2024-2025学年七年级上学期12月学程调查历史试题(无答案)
- 新浪微博营销案例大全(不可不看)
- 医学教材 产科常见并发症学习资料
- 海尔终端SBU系列培训-顾客满意与顾客抱怨正确应对的方法
- 3.4 用电路实现加法运算
- 国有企业2024年度意识形态工作总结
- 浙江省宁波市九校2023-2024学年高三上学期语文期末联考试卷1
- 年度合格供方名单
- 《体育场馆照明方案》课件
- 明确目标推动团队发展计划
- 《傅雷家书》读书分享
- 2023年冬季山东高中学业水平合格考政治试题真题(含答案)
- 个人简历模板(5套完整版)
- 文艺复兴经典名著选读智慧树知到期末考试答案章节答案2024年北京大学
- 英语-时文阅读-7年级(8篇)
- (完整版)博物馆陈列布展工程施工方案
- 巨细胞病毒感染诊疗指南(完整版)
- 公司转让协议书[021]
- 甘教版小学信息技术五年级上册教案全册
评论
0/150
提交评论