作过android开的对于startActivityForResult这个方法的调用,应该不会陌生。
它就像是javascript中的模式对话模式,可以在弹出的新页面中,让用户进行操作,并把结果回传到所调用页面。当然在android中的实现,是有所差异。
在实现项目中,使用有PhoneGap插件,来作webview应用的开发。
当直接使startActivityForResult(intent,requestcode)这个方法,会提示PhoneGap出错,
PhoneGap Exception: Call startActivityForResult(Command, Intent) instead.
看源码,建设调用使用startActivityForResult(intent,-1).这样写的话,达不到“模式对话框”的目的。
源码中还有另一个PhoneGap扩展的方法:public void startActivityForResult(Plugin command, Intent intent, int requestCode)
,一开始也没管那么多,直接就调这个,那个Plugin command的参数,因为我是主程序调用的,所以很自然的就直接置为null.
测试正常,调用、回调都正常。以后没事了
项目运行一段时间后,发觉以前从插件发起的startActivityForResult都无法正常回调了。也就是插件里面定义的onActivityResult都没有被调到,跟踪发现,所有的回调都被主程序的onActivity给拦截了。
分析以下代码可以看出PhoneGap插件中,onActivityResult如何与对应插件相绑定,以及产生上述问题的原因:
public void startActivityForResult(Plugin command, Intent intent, int requestCode) {
this.activityResultCallback = command;
this.activityResultKeepRunning = this.keepRunning;
// If multitasking turned on, then disable it for activities that return results
if (command != null) {
this.keepRunning = false;
}
// Start activity
super.startActivityForResult(intent, requestCode);
}
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
super.onActivityResult(requestCode, resultCode, intent);
Plugin callback = this.activityResultCallback;
if (callback != null) {
callback.onActivityResult(requestCode, resultCode, intent);
}
}
看来想在主程序(继承GapDroid)中使用startActivityForResult方法,只能采用绑定插件的办法了。
分析过程是相当无聊。只列出来解决办法,希望有更好处理的同仁,给予回复:
在主程序中定义一个空的插件,所有需要用到startActivityForResult的场合,都使用这个空的插件来作为第一参数。并在空插件中覆盖onActivityResult方法(里面可以是直接访问、调用主程序的代码)。
/**
* 自定义一个空的插件,仅为完成原DroidGap中的事件处理逻辑
*/
class EmptyPlugin extends Plugin {
@Override
public PluginResult execute(String action, JSONArray args,
String callbackId) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent intent) {
// TODO Auto-generated method stub
if (resultCode == RESULT_OK) {
if (requestCode == SETTING_CODE) {
........................................自己的处理代码............
}
}
}
}
private final EmptyPlugin ep = new EmptyPlugin();
startActivityForResult(ep,intent,111111);
分享到:
相关推荐
Unity WebView插件UniWebView4.3.1
功能非常强大的Flutter浏览器插件,支持非常多的事件监听,JS和flutt 全代码开源,放心下载 在开发WEB界面展示不二选择。 值得深入学习研究
在android的webview中实现websocket通信
unity webview插件,可以使用unity中使用浏览器,支持URL和本地HTML
phonegap 安卓 webview
安卓java获取webview源码 注意:截至 2016 年,所有现代 Web 视图都内置了良好的 WebGL 支持,因此这不再有用。 这被认为是 2011 年的疯狂黑客攻击。 WebGLGap - 在 PhoneGap 中启用 WebGL 关于 目前,HTML5 游戏在...
phonegap插件实现webView与js进行交互
Unity WebView中文输入支持 1.利用ugui进行替代输入. 2.效果展示:https://blog.csdn.net/qq_26318597/article/details/132760284. 3.测试版本:unity 2022.3.15f1c1、WebView_4.4 4.支持Game分辨率与Canvas分辨率...
允许flutter与本机webview通信的插件。
uniapp 使用webView通讯
使用WebView中的Javascript和本地代码交互
NULL 博文链接:https://xiaoa7.iteye.com/blog/908333
unity3D 内嵌webview3.12插件。 unity内嵌网页插件 支持mac和Windows 平台 功能 - 网络浏览 - 载入本地 HTML 文件 - JavaScript 完整支持 - 基于 url scheme 的消息系统 - 通过绝对值或引用 Unity UI 元素的相对值来...
android开发中WebView的使用 WebView是个好东西,作用相当于一个迷你的浏览器,采用Webkit内核,因此完美支持html,javascript,css等。有时候,我们完全可以把UI甚至数据处理都交给WebView,配合PHP等服务端程序,...
WebView的使用 简单的 WebView的使用
Android x5内核集成demo 解决webview在使用内核时跟h5混合调用时出现的白屏,加载缓慢,vue报错各种兼容问题。在x5内核加载失败时,会切换成系统本身的内核来加载h5内容。如果项目上架Google商店等海外市场运营的,...
http://blog.csdn.net/ren65432/article/details/53815832
供Unity调用安卓的WebView使用 内含AAR包及插件包名
Xam.Plugin.Webview, 在PCL项目中,HybridWebView的Xamarin插件 Xamarin插件轻量级跨平台web视图设计用于利用 Android 。iOS和 Windows 中的原生 web view组件,从而在基础控件之上提供增强功能。Xamarin论坛链接...
案列主要介绍WebView加载带有HTML5的视频标签的网页,点击网页里面的链接还是在当前的webview里跳转,不跳到浏览器那边,防止WebView内存泄漏等。