持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情
Cordova JS调用Android方法
上一篇文章讲了Cordova的安装和配置环境,这篇文章讲解具体的调用方法,并不是自定义插件的模式,仅仅讲如何调用
遇到的问题
使用cordova的时候,会有很多关联的环境问题
- 当node版本过低时,安装cordova总会出现奇奇怪怪的问题,升级node之后就正常了
- AndroidStudio打不开老项目的问题,由于创建cordova项目添加安卓平台时会携带gradle版本,gradle里面也写了脚本,而AndroidStudio新版本更新不能使用gradle的旧版本了。
JS调用Android方法
cordova的生态中,有很多原生的插件,使用插件的方法也很方便,但接下来并不是封装插件,使用插件,而是简单的JS调用,实际上也和使用插件时自动生成的代码一致。
1. 安卓原生方法
- 创建一个XXPlugin,集成
CordovaPlugin
- 实现方法
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",[]);};
}
通过回调也可以接收到安卓端发来的参数。