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