WebView项目中PhoneGap插件使用细节

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

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

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

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

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

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

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

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

publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode) 
  • 1.

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

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

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

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

Java代码

publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode){  
 
this.activityResultCallback=command;  
 
thisthisthis.activityResultKeepRunning=this.keepRunning;  
 
//Ifmultitaskingturnedon,thendisableitforactivitiesthatreturnresults  
 
if(command!=null){  
 
this.keepRunning=false;  
 
}  
 
//Startactivity  
 
super.startActivityForResult(intent,requestCode);  
 
}  
 
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentintent){  
 
super.onActivityResult(requestCode,resultCode,intent);  
 
Plugincallback=this.activityResultCallback;  
 
if(callback!=null){  
 
callback.onActivityResult(requestCode,resultCode,intent);  
 
}  
 
}  
 
publicvoidstartActivityForResult(Plugincommand,Intentintent,intrequestCode){  
 
this.activityResultCallback=command;  
 
thisthisthis.activityResultKeepRunning=this.keepRunning;  
 
//Ifmultitaskingturnedon,thendisableitforactivitiesthatreturnresults  
 
if(command!=null){  
 
this.keepRunning=false;  
 
}  
 
//Startactivity  
 
super.startActivityForResult(intent,requestCode);  
 
}  
 
protectedvoidonActivityResult(intrequestCode,intresultCode,Intentintent){  
 
super.onActivityResult(requestCode,resultCode,intent);  
 
Plugincallback=this.activityResultCallback;  
 
if(callback!=null){  
 
callback.onActivityResult(requestCode,resultCode,intent);  
 
}  
 

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.

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

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

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

Java代码

/**  
*自定义一个空的插件,仅为完成原DroidGap中的事件处理逻辑  
*/  
classEmptyPluginextendsPlugin{  
@Override  
publicPluginResultexecute(Stringaction,JSONArrayargs,  
StringcallbackId){  
//TODOAuto-generatedmethodstub  
returnnull;  
}  
@Override  
publicvoidonActivityResult(intrequestCode,intresultCode,  
Intentintent){  
//TODOAuto-generatedmethodstub  
if(resultCode==RESULT_OK){  
if(requestCode==SETTING_CODE){  
........................................自己的处理代码............  
}  
}  
}  
}  
/**  
*自定义一个空的插件,仅为完成原DroidGap中的事件处理逻辑  
*/  
classEmptyPluginextendsPlugin{  
@Override  
publicPluginResultexecute(Stringaction,JSONArrayargs,  
StringcallbackId){  
//TODOAuto-generatedmethodstub  
returnnull;  
}  
@Override  
publicvoidonActivityResult(intrequestCode,intresultCode,  
Intentintent){  
//TODOAuto-generatedmethodstub  
if(resultCode==RESULT_OK){  
if(requestCode==SETTING_CODE){  
........................................自己的处理代码............  
}  
}  
}  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.

Java代码

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

Java代码

startActivityForResult(ep,intent,111111); 
  • 1.

小结: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

2014-07-04 09:43:22

2023-11-30 09:00:00

TypeScript开发

2012-03-07 11:23:09

PhoneGapAndroid代码交互

2009-06-29 15:51:48

Spring容器

2019-03-25 10:30:19

开发技能代码

2024-04-03 09:03:05

项目分支管理

2017-07-04 19:02:17

ReacRedux 项目

2024-05-24 10:01:12

2018-05-02 09:18:17

Linux技巧嵌入式

2015-11-05 11:47:37

图片统计项目开发技术

2023-10-27 10:16:17

前端项目Rust
点赞
收藏

51CTO技术栈公众号