0

我使用 Cordova 4.0.0 CLI 生成了代码。

现在我尝试编写一个适用于 Android 的插件(MyPlugin)来从 webview 执行本机代码。但是每次我尝试调用插件的方法时,我都会收到错误消息:

exec() 调用未知插件

我在 config.xml 中尝试了不同的映射(并且还创建了一个 plugin.xml)。但没有什么对我有用。API也不是很有帮助。

有人知道如何实现这一点或我的实施有什么问题吗?

这是我的代码:

com.cordovaDemo.MyPlugin.java

public class MyPlugin extends CordovaPlugin {
@Override
    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
        super.initialize(cordova, webView);

    }

    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        //MyCode
        callbackContext.success(action);
        return true;
    }

索引.html

<head>
...
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>

<title>Hello World</title>


<script>
    window.func = function(str,callback){
        cordova.exec(callback, function(err){alert(err)},"MyPlugin","echo", [str]);
    }
    function callPlugin(str){
        window.func(str,function(){
            alert("Done!");
        });
    }

</script>

</head>
<body>
    <div class="app">

        <div id="deviceready" class="blink">
            <a onclick="callPlugin('Test')">Click me</a>
        </div>
    </div>

</body>

配置文件

<?xml version='1.0' encoding='utf-8'?>
<widget id="com.touristmobile.cordovaDemo" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>CordovaDemo</name>
    ...
    <content src="index.html" />
    <access origin="*" />

    <platform name="android">
    <config-file target="config.xml" parent="/*">
        <feature name="MyPlugin">
            <param name="android-package" value="com.cordovaDemo.MyPlugin"/>
        </feature>
    </config-file>
</platform>

编辑:

好的,我认为现在我了解了 cordova 插件的主要思想。cordova 插件独立于“生成的”Android Wrapper 应用程序。

在我的情况下,cordova Webview 应该是我现有 Android 应用程序的扩展,并且 Webview 应该从主应用程序调用函数和显示信息。简而言之:是否可以调用位于与我的 CordovaActivity 相同级别的类中的函数

4

2 回答 2

0

在您的插件中,您应该有一个使用 require 的 js 文件,该文件导出一个模块(必须与 plugin.xml 中定义的 js 模块匹配)、java 源文件、其他资源(如果需要),最重要的是让 plugman 发挥作用: plugin.xml 文件,描述插件的结构,您可以在其中定义要复制的文件(源文件)和 javascript 模块(js 模块)。

然后,您使用cordova plugin add指定插件源的路径将插件添加到您的项目中。

我建议你看看一个简单的cordova插件,比如振动来研究结构并通过更改文件名、模块名来制作你自己的...,删除你不想支持的所有平台(至少这是什么对我有用) https://git-wip-us.apache.org/repos/asf?p=cordova-plugin-vibration.git;a=tree

供参考的文件:

于 2014-10-29T11:37:22.890 回答
0

好的!我使用 Cordova 3.6.4 解决了它

嵌入式 Webview 是可能的:我遵循本指南: http ://cordova.apache.org/docs/en/4.0.0/guide_platforms_android_webview.md.html#Android%20WebViews

于 2014-11-04T13:28:44.870 回答