PhoneGap与Android之间通信实现原理

移动开发
PhoneGap与Android之间通信实现原理是本我要介绍的内容,主要来了解PhoneGap实现原理,具体内容的实现来看本文详解。

PhoneGapAndroid之间通信实现原理是本我要介绍的内容,主要来了解PhoneGap实现原理。PhoneGap为移动开发者带来了全新的开发模式,使用javascript调用移动设备的本地接口,这样,你就可以在js中调用你手机的摄像头,文件系统等等功能,理论上来说,你的本地应用程序可以访问的接口都可以通过javascript来调用了。不得不说,这样功能实在是很强大。既能使用javascript,html等web技术来实现程序,又能通过统一的接口来调用本地接口。兼具了web应用与app应用的特点。

那么PhoneGap是如何实现javascript脚本调用本地设备的接口的呢?

相信大家都很想知道吧,那我就少点废话了,一句话,通过ajax发送请求,实现脚本对设备发送消息;设备接受到消息处理后通过webView的loadUrl方法(这是Android系统下的浏览器控件对象)执行脚本实现脚本的回调。

主要的代码有下面三处:

1、

xmlhttp.open("GET", "http://127.0.0.1:"+PhoneGap.JSCallbackPort+"/"+PhoneGap.JSCallbackToken , true); 
  • 1.

 这是phonegap.js里面的代码,通过ajax请求,发送消息给设备。
 
2、      

active = true;  
            ServerSocket waitSocket = new ServerSocket(0);  
            port = waitSocket.getLocalPort();  
            token = UUID.randomUUID().toString();  
            while(active)   
            {  
                Socket connection = waitSocket.accept();  
                BufferedReader xhrReader = new BufferedReader(new InputStreamReader(connection.getInputStream()), 40);  
                DataOutputStream output = new DataOutputStream(connection.getOutputStream());  
                String request = xhrReader.readLine();  
                String response = "";  
                if(active && request != null)  
                {  
                    if(request.contains("GET"))  
                    {  
                        String requestParts[] = request.split(" ");  
                        if(requestParts.length == 3 && requestParts[1].substring(1).equals(token))  
                        {  
                            synchronized(this)  
                            {  
                                do  
                                {  
                                    if(!empty)  
                                        break;  
                                    try  
                                    {  
                                        wait(10000L);  
                                        break;  
                                    }  
                                    catch(Exception e) { }  
                                } while(true);  
                            }  
                            if(active)  
                            {  
                                if(empty)  
                                {  
                                    response = "HTTP/1.1 404 NO DATA\r\n\r\n ";  
                                } else  
                                {  
                                    response = "HTTP/1.1 200 OK\r\n\r\n";  
                                    String js = getJavascript();  
                                    if(js != null)  
                                        response = (new StringBuilder()).append(response).append(URLEncoder.encode(js, "UTF-8")).toString();  
                                }  
                            } else  
                            {  
                                response = "HTTP/1.1 503 Service Unavailable\r\n\r\n ";  
                            }  
                        } else  
                        {  
                            response = "HTTP/1.1 403 Forbidden\r\n\r\n ";  
                        }  
                    } else  
                    {  
                        response = "HTTP/1.1 400 Bad Request\r\n\r\n ";  
                    }  
                    output.writeBytes(response);  
                    output.flush();  
                }  
                output.close();  
                xhrReader.close(); 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.

               
这是java代码,监听javascript代码发送过来的请求

3、

appView.loadUrl("javascript:PhoneGap...."); 
  • 1.

通过loadUrl来执行javascript代码。

小结:PhoneGapAndroid之间通信实现原理的内容介绍完了,希望通过本文的学习能对你有所帮助!

责任编辑:zhaolei 来源: 互联网
相关推荐

2017-03-28 10:20:24

Docker通信分析

2021-08-11 14:31:52

鸿蒙HarmonyOS应用

2009-12-22 09:11:31

WCF双向通信

2011-09-14 09:20:03

PhonegapAndroid平台

2023-08-01 08:43:29

Python多线程

2009-09-10 11:26:59

C# form

2009-12-03 18:15:04

Linux

2019-06-25 10:53:06

AndroidFlutter通信

2011-03-10 09:07:47

liferayportlet

2012-12-24 14:40:54

iosjs

2011-04-22 10:30:11

VMwareWindowsFTP

2011-09-05 15:09:06

Android平台Phonegap

2009-07-15 16:05:04

IP通信捷思锐科技Zed-3

2022-12-11 20:09:50

网络编程通信

2012-03-07 11:23:09

PhoneGapAndroid代码交互

2024-04-03 08:25:52

2018-10-11 05:07:19

物联网通信IOT

2011-06-22 17:49:35

Linux Qt 串口

2011-09-05 10:07:03

多媒体融合通信智能化

2021-06-28 10:20:31

网络技术Kubernetes通信
点赞
收藏

51CTO技术栈公众号