作过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);
分享到:
相关推荐
1. **安装插件**:在你的PhoneGap项目中,你需要通过命令行工具(如Cordova CLI)或者在配置文件`config.xml`中添加插件引用,以安装Camera插件。 2. **配置权限**:在AndroidManifest.xml文件中,确保包含了访问...
下面将详细介绍Unity 3D Webview插件的关键特性、工作原理以及如何在项目中进行集成。 1. **关键特性** - **多平台支持**:Unity 3D Webview插件支持Android和iOS两大主流移动平台,这意味着你可以创建跨平台的...
PhoneGap打开文档插件是移动应用开发中的一个重要组件,它允许开发者在PhoneGap应用程序中方便地查看和打开各种类型的文档。PhoneGap是一个基于HTML、CSS和JavaScript的框架,用于构建跨平台的原生移动应用。它利用...
开发者需要将这个插件添加到PhoneGap项目中,配置相应的XML文件(如config.xml)以启用插件,并在JavaScript中引用相应的API接口。此外,还需要对AndroidManifest.xml进行相应设置,如添加相机使用权限。 7. **...
在PhoneGap项目中添加自定义插件,需要在`config.xml`中声明该插件,并确保在编译时将Java或Objective-C代码包含到项目中。对于Android,可能还需要在`res/xml/config.xml`中配置权限,如显示对话框所需的`android....
通过安装和使用插件,开发者可以访问更多的设备功能,如蓝牙、振动、推送通知等。这部分教程可能会详细介绍如何查找、安装和自定义插件。 在实际开发中,数据存储和网络通信也至关重要。PhoneGap支持使用SQLite...
在PhoneGap项目中,我们通常会使用Cordova CLI(命令行接口)来安装插件。一个常用的二维码扫描插件是`cordova-plugin-qrscanner`。在命令行中,执行以下命令安装: ``` cordova plugin add cordova-plugin-qr...
- Flutter的插件架构:理解如何创建和使用插件,包括如何处理平台间通信。 - Webview API:掌握Android和iOS上的Webview API,了解如何设置Webview的属性、拦截请求、注入JavaScript等。 - JavaScript与Dart的互操作...
本篇将详细介绍如何在Android的PhoneGap项目中集成WebSocket插件。 首先,我们需要理解WebSocket的基本概念。WebSocket协议是HTTP的升级版,它在建立连接后保持持久化连接,使得数据可以在服务器和客户端之间双向...
Unity webView插件 UniWebView3.18.1
“3D WebView for Windows and macOS Web Browser4.2.unitypackage”是这个插件的资源包文件,包含了所有必要的资产和脚本,便于开发者导入到自己的Unity项目中。使用Unity的Asset Store或直接解压下载的文件,...
这个实例将深入探讨如何利用PhoneGap进行客户端和服务端的开发,以及如何集成和使用插件。 一、PhoneGap基础知识 PhoneGap的核心理念是通过WebView组件将Web应用包装在原生移动应用中,这样Web应用就能访问到设备的...
通过以上步骤,你可以在Android应用中使用Webview加载一个通过WebRTC调用摄像头的网页。这个过程涉及到了Android的Webview配置、权限管理和WebRTC的JavaScript API。在实际项目中,可能还需要考虑错误处理、性能优化...
5. 编译并运行项目,PhoneGap会将Web内容嵌入到WebView中,通过与设备的交互来实现功能。 在实际应用中,PhoneGap可以用来做各种类型的应用,比如在示例中提到的新闻网站。开发者可以通过JavaScript与服务器交互,...
在使用 android-websockets 项目时,开发者需要在 Eclipse 中新建一个 Android 项目,然后将 WebSocketFactory.java 和 WebSocket.java 文件打包成 jar 文件,并将其存放在项目的 libs 目录下。然后,开发者需要将 ...
这个示例可能包括JavaScript接口的定义、各个平台的原生代码实现以及如何在项目中集成和使用这个插件的说明。 总的来说,PhoneGap通过WebView和JavaScript桥接技术,使得开发者能够用Web技术开发具有原生设备功能的...
- 示例资源:可能包含需要在Android Activity中使用的图片、布局文件等。 通过以上介绍,我们可以理解PhoneGap调用Android Activity的基本流程和关键知识点。开发者可以通过这个技术实现混合应用中的复杂功能,...
当应用启动时,PhoneGap会加载这个页面,并在设备的WebView组件中显示。这展示了PhoneGap如何将Web应用转换为原生应用的基本概念。 为了使这个入门实例更具实用性,我们可以扩展HelloWorld,添加PhoneGap的API调...
- **编译与安装**:完成插件开发后,将其添加到PhoneGap项目中,然后编译并安装到iOS设备或模拟器上进行测试。 6. **使用PhoneGap插件**:在Web应用中,可以通过`window.cordova.plugins`对象来调用插件的方法,...
而"3D WebView for Android and iOS Web Browser 4.2.2.unitypackage"是Unity的资源包文件,其中包含了插件的所有组件和资源,开发者可以通过Unity编辑器导入这个包来添加插件到他们的项目中。 在实际应用中,...