Cordova JS调用Android方法

624 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

Cordova JS调用Android方法

上一篇文章讲了Cordova的安装和配置环境,这篇文章讲解具体的调用方法,并不是自定义插件的模式,仅仅讲如何调用

遇到的问题

使用cordova的时候,会有很多关联的环境问题

  1. 当node版本过低时,安装cordova总会出现奇奇怪怪的问题,升级node之后就正常了
  2. AndroidStudio打不开老项目的问题,由于创建cordova项目添加安卓平台时会携带gradle版本,gradle里面也写了脚本,而AndroidStudio新版本更新不能使用gradle的旧版本了。

JS调用Android方法

cordova的生态中,有很多原生的插件,使用插件的方法也很方便,但接下来并不是封装插件,使用插件,而是简单的JS调用,实际上也和使用插件时自动生成的代码一致。

1. 安卓原生方法
  1. 创建一个XXPlugin,集成CordovaPlugin
  2. 实现方法execute方法
package com.yourname;

import android.app.Activity;
import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.json.JSONException;

public class PermissionPlugin extends CordovaPlugin {

    private Activity activity;

    int index = 0;

    @Override
    public void initialize(CordovaInterface cordova, CordovaWebView webView) {
        super.initialize(cordova, webView);
        this.activity = cordova.getActivity();
    }

    @Override
    public boolean execute(String action, String rawArgs, CallbackContext callbackContext) throws JSONException {
        if ("isPermission".equals(action)){
            index++;
            if (index % 2 == 0){
                callbackContext.success("true");
            }else{
                callbackContext.success("false");
            }
            return true;
       }
        return false;
    }
}
2. 在配置文件中注册

目录:res/xml/config.xml

添加

<widget id="com.yourname" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">

    <feature name="PermissionPlugin">
        <param name="android-package" value="com.yourname.PermissionPlugin" />
    </feature>
</widget>
3. JS使用

测试时直接更改assets中的html即可,编辑www/index.html,在div中增加一个带有id的按钮。

<button id="permission">权限</button>

然后编辑www/js/index.js,在JS中给按钮添加点击事件,在点击事件中调用原生方法。完整代码

function onDeviceReady() {
    // Cordova is now initialized. Have fun!

    console.log('Running cordova-' + cordova.platformId + '@' + cordova.version);
    document.getElementById('deviceready').classList.add('ready');
    document.getElementById("open10").onclick=function(){cordova.exec(function(s){
                                alert("接收到: " + s);
                                console.log("接收到: " + s)
                            },function(){},"PermissionPlugin","isPermission",[]);};
}

通过回调也可以接收到安卓端发来的参数。