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















 
 
 




 
 
 
 