WebView项目中PhoneGap插件使用细节

移动开发
WebView项目中PhoneGap插件使用细节是本文要介绍的内容,主要是来了解PhoneGap插件的用法,具体内容来看本文详解。

WebView项目中PhoneGap插件使用细节是本文要介绍的内容,主要是来了解PhoneGap插件的用法,作过android开发的对于startActivityForResult这个方法的调用,应该不会陌生。

它就像是javascript中的模式对话模式,可以在弹出的新页面中,让用户进行操作,并把结果回传到所调用页面。当然在android中的实现,是有所差异。

在实现项目中,使用有PhoneGap插件,来作webview应用的开发。

当直接使startActivityForResult(intent,requestcode)这个方法,会提示PhoneGap出错,

  1. PhoneGapException:CallstartActivityForResult(Command,Intent)instead. 

看源码,建设调用使用startActivityForResult(intent,-1).这样写的话,达不到“模式对话框”的目的。

源码中还有另一个PhoneGap扩展的方法:

  1. publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode) 

,一开始也没管那么多,直接就调这个,那个Plugincommand的参数,因为我是主程序调用的,所以很自然的就直接置为null.

测试正常,调用、回调都正常。以后没事了

项目运行一段时间后,发觉以前从插件发起的startActivityForResult都无法正常回调了。也就是插件里面定义的onActivityResult都没有被调到,跟踪发现,所有的回调都被主程序的onActivity给拦截了。

分析以下代码可以看出PhoneGap插件中,onActivityResult如何与对应插件相绑定,以及产生上述问题的原因:

Java代码

  1. publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode){  
  2.  
  3. this.activityResultCallback=command;  
  4.  
  5. thisthisthis.activityResultKeepRunning=this.keepRunning;  
  6.  
  7. //Ifmultitaskingturnedon,thendisableitforactivitiesthatreturnresults  
  8.  
  9. if(command!=null){  
  10.  
  11. this.keepRunning=false;  
  12.  
  13. }  
  14.  
  15. //Startactivity  
  16.  
  17. super.startActivityForResult(intent,requestCode);  
  18.  
  19. }  
  20.  
  21. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentintent){  
  22.  
  23. super.onActivityResult(requestCode,resultCode,intent);  
  24.  
  25. Plugincallback=this.activityResultCallback;  
  26.  
  27. if(callback!=null){  
  28.  
  29. callback.onActivityResult(requestCode,resultCode,intent);  
  30.  
  31. }  
  32.  
  33. }  
  34.  
  35. publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode){  
  36.  
  37. this.activityResultCallback=command;  
  38.  
  39. thisthisthis.activityResultKeepRunning=this.keepRunning;  
  40.  
  41. //Ifmultitaskingturnedon,thendisableitforactivitiesthatreturnresults  
  42.  
  43. if(command!=null){  
  44.  
  45. this.keepRunning=false;  
  46.  
  47. }  
  48.  
  49. //Startactivity  
  50.  
  51. super.startActivityForResult(intent,requestCode);  
  52.  
  53. }  
  54.  
  55. protectedvoidonActivityResult(intrequestCode,intresultCode,Intentintent){  
  56.  
  57. super.onActivityResult(requestCode,resultCode,intent);  
  58.  
  59. Plugincallback=this.activityResultCallback;  
  60.  
  61. if(callback!=null){  
  62.  
  63. callback.onActivityResult(requestCode,resultCode,intent);  
  64.  
  65. }  
  66.  

看来想在主程序(继承GapDroid)中使用startActivityForResult方法,只能采用绑定插件的办法了。

分析过程是相当无聊。只列出来解决办法,希望有更好处理的同仁,给予回复:

在主程序中定义一个空的插件,所有需要用到startActivityForResult的场合,都使用这个空的插件来作为***参数。并在空插件中覆盖onActivityResult方法(里面可以是直接访问、调用主程序的代码)。

Java代码

  1. /**  
  2. *自定义一个空的插件,仅为完成原DroidGap中的事件处理逻辑  
  3. */  
  4. classEmptyPluginextendsPlugin{  
  5. @Override  
  6. publicPluginResultexecute(Stringaction,JSONArrayargs,  
  7. StringcallbackId){  
  8. //TODOAuto-generatedmethodstub  
  9. returnnull;  
  10. }  
  11. @Override  
  12. publicvoidonActivityResult(intrequestCode,intresultCode,  
  13. Intentintent){  
  14. //TODOAuto-generatedmethodstub  
  15. if(resultCode==RESULT_OK){  
  16. if(requestCode==SETTING_CODE){  
  17. ........................................自己的处理代码............  
  18. }  
  19. }  
  20. }  
  21. }  
  22. /**  
  23. *自定义一个空的插件,仅为完成原DroidGap中的事件处理逻辑  
  24. */  
  25. classEmptyPluginextendsPlugin{  
  26. @Override  
  27. publicPluginResultexecute(Stringaction,JSONArrayargs,  
  28. StringcallbackId){  
  29. //TODOAuto-generatedmethodstub  
  30. returnnull;  
  31. }  
  32. @Override  
  33. publicvoidonActivityResult(intrequestCode,intresultCode,  
  34. Intentintent){  
  35. //TODOAuto-generatedmethodstub  
  36. if(resultCode==RESULT_OK){  
  37. if(requestCode==SETTING_CODE){  
  38. ........................................自己的处理代码............  
  39. }  
  40. }  
  41. }  

Java代码

  1. privatefinalEmptyPluginep=newEmptyPlugin();  
  2. privatefinalEmptyPluginep=newEmptyPlugin(); 

Java代码

  1. startActivityForResult(ep,intent,111111); 

小结:WebView项目中PhoneGap插件使用细节startActivityForResult的内容介绍完了,希望通过本文的学习能对你有所帮助!

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

2011-09-13 09:49:59

PhoneGap插件

2011-10-11 10:06:12

PhoneGap插件

2011-12-19 08:57:46

PhoneGapNativeContr

2011-12-23 10:02:37

PhoneGapAndroid插件

2012-03-07 11:17:19

AndroidPhoneGap插件

2011-09-02 13:38:56

PhoneGap插件Android

2009-06-24 17:34:58

使用JSF的经验

2024-10-17 08:58:31

2020-10-27 14:15:42

SpringBoot

2023-11-30 09:00:00

TypeScript开发

2014-07-04 09:43:22

2012-03-07 11:23:09

PhoneGapAndroid代码交互

2009-06-29 15:51:48

Spring容器

2017-07-04 19:02:17

ReacRedux 项目

2024-04-03 09:03:05

项目分支管理

2024-05-24 10:01:12

2019-03-25 10:30:19

开发技能代码

2012-12-26 12:41:14

Android开发WebView

2021-08-23 10:40:30

人工智能KubernetesAI

2018-05-02 09:18:17

Linux技巧嵌入式
点赞
收藏

51CTO技术栈公众号