gpt4 book ai didi

android - 在 Android 中混合 cordova 和 native Activity

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:42:20 24 4
gpt4 key购买 nike

我希望在 cordova 中处理我的大部分应用程序(列表项、存储、登录、关于屏幕等...),因为在 native 工作流中这样做很痛苦。

但是我有一个特定的 Activity (我已经创建了)不能用 cordova 完成(至少不够好和不够快)。我应该如何创建这个应用程序?

  • 我是否应该创建一个只加载这两个插件的 cordova 插件? Activity ?
  • 我应该通过 cli 生成一个 cordova 应用程序还是应该将 cordova 嵌入到一个 Activity 中?

如果有更多这方面的 Material ,我很乐意听到。

提前致谢。

最佳答案

这取决于您创建的 Activity 。

如果您的主要 Activity 是 Cordova 屏幕,并且它将是全屏的,并且 Cordova 部分上的某些操作将针对特定任务启动您的 native Activity,那么您应该为此使用一个插件来启动您的 Activity使用一个 Intent ,当你完成它时,你关闭它并返回到 Cordova Activity ,返回一个值或不返回一个值。

如果您想混合使用 Cordova View 和 native View ,其中没有一个是全屏的,那么您应该将 Cordova 嵌入到 native 项目中。

如果您的 Activity 将成为您的主要 Activity ,那么嵌入 Cordova 是您唯一的选择。

由于您要求提供示例并且您不认为真正的插件不是一个很好的示例,我将简化 plugin creation guide

插件需要一个如下所示的 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类中调用的 Action 第五个是一个数组或参数,如果你想发送的话。要执行它,请单击按钮或根据需要调用 showNativeView()。提醒一下,这过于简化了,正确的做法应该是为插件创建一个命名空间并向其中添加不同的功能,但我想保持简单。

最后 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.
}

这会启动一个不返回任何内容的简单 Intent ,如果您的 Activity 返回某些内容,那么您必须使用

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);
}

您在这里调用成功,而不是在启动 Intent 后立即调用,并返回 Activity 返回的值。您还应该检查 REQUEST_CODE 以匹配您用于启动 Intent 的代码、 Activity 的结果等。

关于android - 在 Android 中混合 cordova 和 native Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34578663/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com