`
xumingrencai
  • 浏览: 1179607 次
文章分类
社区版块
存档分类
最新评论

PhoneGap与Android之间通信原理

 
阅读更多

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

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

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

主要的代码有下面三处:

1、

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

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

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

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

3、

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

通过loadUrl来执行javascript代码。

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

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics