PhoneGap與Android之間通信實(shí)現(xiàn)原理
PhoneGap與Android之間通信實(shí)現(xiàn)原理是本我要介紹的內(nèi)容,主要來了解PhoneGap實(shí)現(xiàn)原理。PhoneGap為移動(dòng)開發(fā)者帶來了全新的開發(fā)模式,使用javascript調(diào)用移動(dòng)設(shè)備的本地接口,這樣,你就可以在js中調(diào)用你手機(jī)的攝像頭,文件系統(tǒng)等等功能,理論上來說,你的本地應(yīng)用程序可以訪問的接口都可以通過javascript來調(diào)用了。不得不說,這樣功能實(shí)在是很強(qiáng)大。既能使用javascript,html等web技術(shù)來實(shí)現(xiàn)程序,又能通過統(tǒng)一的接口來調(diào)用本地接口。兼具了web應(yīng)用與app應(yīng)用的特點(diǎn)。
那么PhoneGap是如何實(shí)現(xiàn)javascript腳本調(diào)用本地設(shè)備的接口的呢?
相信大家都很想知道吧,那我就少點(diǎn)廢話了,一句話,通過ajax發(fā)送請(qǐng)求,實(shí)現(xiàn)腳本對(duì)設(shè)備發(fā)送消息;設(shè)備接受到消息處理后通過webView的loadUrl方法(這是Android系統(tǒng)下的瀏覽器控件對(duì)象)執(zhí)行腳本實(shí)現(xiàn)腳本的回調(diào)。
主要的代碼有下面三處:
1、
- xmlhttp.open("GET", "http://127.0.0.1:"+PhoneGap.JSCallbackPort+"/"+PhoneGap.JSCallbackToken , true);
這是phonegap.js里面的代碼,通過ajax請(qǐng)求,發(fā)送消息給設(shè)備。
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();
這是java代碼,監(jiān)聽javascript代碼發(fā)送過來的請(qǐng)求
3、
- appView.loadUrl("javascript:PhoneGap....");
通過loadUrl來執(zhí)行javascript代碼。
小結(jié):PhoneGap與Android之間通信實(shí)現(xiàn)原理的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!