自定义cordova插件调用无效

发布于 2022-09-07 16:42:01 字数 3421 浏览 25 评论 0

最近一直研究cordova来打包vue项目成webapp,想自己尝试一下写一个cordova插件,然后用js来调用这个组件执行的结果。

cordova项目结构如下:

图片描述

1、创建组件ExtraInfo

ExtraInfo.java文件内容如下:

import android.view.animation.DecelerateInterpolator;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.RelativeLayout;
import android.content.Context;
import android.app.Activity;
import android.content.Intent;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.json.JSONArray;
import org.json.JSONException;

public class ExtraInfo extends CordovaPlugin {
  
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext)
            throws JSONException {
        Activity activity = this.cordova.getActivity();
        if(action.equals("getExtra")) {
            Intent i = activity.getIntent();
            if(i.hasExtra(Intent.EXTRA_TEXT)) {
                callbackContext.success(i.getStringExtra(Intent.EXTRA_TEXT));
            }else{
                callbackContext.error("返回错误信息");
            }
            return true;
        }
        return false;
    }
}

ExtraInfo.js文件内容如下:

var exec = require('cordova/exec');
 
exports.getExtra = function(success, error) {
    exec(success, error,"ExtraInfo","getExtra", []);
};

plugin.xml文件内容如下:

<?xmlversion="1.0"encoding="utf-8"?>
<plugin id="com.zyd.cordova" version="0.0.1"
        xmlns=" http://apache.org/cordova/ns/plugins/1.0"
        xmlns:android=" http://schemas.android.com/apk/res/android">
    <name>ExtraInfo</name>
    <description>Description</description>
    <js-module name="ExtraInfo" src="www/ExtraInfo.js">
        <clobbers target="cordova.plugins.ExtraInfo" />
    </js-module>
    <platform name="android">
        <config-file parent="/*" target="res/xml/config.xml">
            <feature name="ExtraInfo">
                <param name="android-package" value="com.zyd.cordova.ExtraInfo" />
            </feature>
        </config-file>
        <source-file src="src/android/ExtraInfo.java" target-dir="src/com/zyd/cordova" />
    </platform>
</plugin>

2、添加组件ExtraInfo到项目中

然后到 ……/platforms/android 路径下执行命令cordova plugin add ExtraInfo,添加该组件到项目中

3、调用组件

为了简单,我在cordova创建的项目模板文件www/js/index.js里面直接调用该cordova插件:

receivedEvent: function(id) {
    var cordova = require('cordova');
    var extraInfo = cordova.require('com.zyd.cordova.ExtraInfo');

    extraInfo.getExtra(function(message) {
        alert("111" + message);
    }, function(message) {
        alert("2222" + message);
    });
}

最后在www/index.html引用该文件

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

不知道为什么一直不显示调用结果,index.js里面 getExtra()alert语句不执行,该句前面定义alert可以执行,问题出在哪儿呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文