在Android中混合使用cordova和本地活动

我希望我的应用程序(列表项,存储,签名,关于屏幕等等)的大部分在cordova处理,因为在原生工作stream程中这样做是很痛苦的。

但我有一个特定的活动(我已经创build),不能用cordova来完成(至less不够好)。 我应该如何创build这个应用程序?

  • 上午我应该创build一个cordova插件,只会加载这两个活动?
  • 我应该通过cli生成一个cordova应用程序,还是应该将cordovaembedded到一个活动中?

如果有更多的材料,我很乐意听到这个消息。

提前致谢。

Related of "在Android中混合使用cordova和本地活动"

这取决于您创build的活动。

如果你的主要活动是cordova屏幕,并且它将是全屏幕的,并且对cordova部分的一些行动将启动你的本地活动来完成某个任务,那么你应该使用一个插件来启动你的活动,使用一个意图当你完成它,你closures它,回到cordova的活动,返回值或不。

如果您想将Cordova视图与本地视图混合在一起,那么它们都不是全屏,那么您应该将Cordovaembedded到本地项目中。

如果你的活动将是你的主要活动,那么embeddedcordova是你唯一的select。

正如你问的例子,你不认为真正的插件不是一个很好的例子,我会简化插件创build指南

一个插件需要一个plugin.xml文件,如下所示:

<?xml version="1.0" encoding="UTF-8"?> <plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" id="your-plugin-id" version="1.0.0"> <name>pluginName</name> <description>description of the plugin</description> <license>License of the plugin</license> <js-module src="www/pluginName.js" name="pluginName"> <clobbers target="pluginName" /> </js-module> <platform name="android"> <config-file target="res/xml/config.xml" parent="/*"> <feature name="PluginName" > <param name="android-package" value="your.plugin.package.pluginName"/> </feature> </config-file> <source-file src="src/android/PluginName.java" target-dir="your/plugin/package/PluginName" /> </platform> </plugin> 

通过查看,你可以看到你还需要一个带有pluginName.js文件的www文件夹和一个带有pluginName.java文件的src / android文件夹。

pluginName.js应该是这样的:

 function showNativeView() { cordova.exec(successCallback, errorCallback, "PluginName", "showNativeView", [arguments]); } 

第一个参数是插件完成执行时调用的successCallback函数。 第二个参数是在插件有问题时调用的errorCallback函数第三个参数是要调用的java类的名称,它必须与plugin.xml中的参数匹配第四个参数是在java类中调用的动作第五是数组或参数,如果你想发送任何。 要执行它从一个button点击或无论你想要调用showNativeView()。 提醒,这是过分简化,正确的做法应该是为插件创build一个名称空间,并添加不同的function,但我想保持简单。

最后PluginName.java应该是这样的:

  @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if ("showNativeView".equals(action)) { Intent yourIntent = new Intent(this.cordova.getActivity().getBaseContext(), YourActivityToLaunch.class); cordova.getActivity().startActivity(yourIntent); callbackContext.success(); return true; } return false; // Returning false results in a "MethodNotFound" error. } 

这启动了一个简单的意图,不返回任何东西,如果你的活动返回的东西,那么你必须使用

 this.cordova.startActivityForResult(this, yourIntent, REQUEST_CODE); 

并添加

 @Override public void onActivityResult(int requestCode, int resultCode, Intent intent) { String result = intent.getStringExtra("WHATEVER_THE_INTENT_RETURNS"), this.callbackContext.success(result); } 

您在此处调用成功,而不是在启动意图之后立即执行,并返回返回的活动的值。 您还应该检查REQUEST_CODE以匹配您用来启动意图的人,活动的结果等。