一、安装Cordova
环境准备:java,Android SDK 或者 Android Studio(Android studio 会自动安装sdk),node.js
使用 npm 安装 Cordova
#安装cordova
npm install -g cordova
#安装插件管理器
npm install -g plugman
创建Cordova项目
cordova create myapp com.lzx.app MyApp
# myapp 目录名称
# com.lzx.app 包名/工程id
# MyApp 项目名称
添加Android项目代码
# 进入项目的目录
cd myapp
cordova platform add android --save
创建插件
plugman create --name MyPlugin --plugin_id com.lzx.plugins --plugin_version 1.0.0
# MyPlugin --插件名称
# com.lzx.plugins --插件包名
# 1.0.0 --插件版本
生成插件 java 文件
plugman platform add --platform_name android
生成Android代码后src文件夹下会多出一个文件
www文件下的js文件时声名给js调用的方法
修改plugin.xml文件
修改后的样子
<?xml version="1.0" encoding="utf-8"?>
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0" xmlns:android="http://schemas.android.com/apk/res/android" id="com.lzx.plugins" version="1.0.0">
<name>MyPlugin</name>
<js-module name="MyPlugin" src="www/MyPlugin.js">
<clobbers target="cordova.plugins.MyPlugin"/>
</js-module>
<platform name="android">
<config-file parent="/*" target="res/xml/config.xml">
<feature name="MyPlugin">
<param name="android-package" value="com.lzx.plugins.MyPlugin"/>
</feature>
</config-file>
<config-file parent="/*" target="AndroidManifest.xml"/>
<source-file src="src/android/MyPlugin.java" target-dir="src/com/lzx/plugins"/>
</platform>
</plugin>
初始化npm,生成package.json文件
npm init
插件创建完成,接下来安装插件到Cordova项目,使用Android Studio 打开Android代码实现插件具体的功能
切换到Cordova项目目录
cd Cordova目录
# 安装插件
cordova plugin add 插件路径
用Android studio 打卡Android项目
发现刚才的java文件一进导入项目
我们可以在这里实现播放mp3的功能
插件实现类
package com.lzx.plugins;
import android.media.MediaPlayer;
import android.net.Uri;
import android.widget.Toast;
import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CallbackContext;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
/**
* This class echoes a string called from JavaScript.
*/
public class MyPlugin extends CordovaPlugin {
private MediaPlayer mediaPlayer = null;
@Override
public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
if (action.equals("start")) {
String message = args.getString(0);
this.start(message, callbackContext);
return true;
}else if(action.equals("stop")){
String message = args.getString(0);
this.stop(message, callbackContext);
return true;
}
return false;
}
private void start(String message, CallbackContext callbackContext ){
Toast.makeText(cordova.getActivity(),"开始播放",Toast.LENGTH_LONG).show();
this.mediaPlayer = MediaPlayer.create(cordova.getContext(),MResource.getIdByName(cordova.getContext(),"raw","back"));
this.mediaPlayer.start();
}
private void stop(String message, CallbackContext callbackContext ){
Toast.makeText(cordova.getActivity(),"结束播放",Toast.LENGTH_LONG).show();
mediaPlayer.stop();
}
private void coolMethod(String message, CallbackContext callbackContext) {
if (message != null && message.length() > 0) {
callbackContext.success(message);
} else {
callbackContext.error("Expected one non-empty string argument.");
}
}
}
获取资源id类
package com.lzx.plugins;
import android.content.Context;
public class MResource {
public static int getIdByName(Context context, String className, String resName) {
String packageName = context.getPackageName();
int id = 0;
try {
Class r = Class.forName(packageName + ".R");
Class[] classes = r.getClasses();
Class desireClass = null;
for (Class cls : classes) {
if (cls.getName().split("\\$")[1].equals(className)) {
desireClass = cls;
break;
}
}
if (desireClass != null) {
id = desireClass.getField(resName).getInt(desireClass);
}
} catch (Exception e) {
e.printStackTrace();
}
return id;
}
}
MP3文件资源
把实现需要的java文件和MP3资源文件拷到插件目录下
plugin.xml修改,配置文件子啊Android项目下的路径
插件实现完成
下面我们新创建一个Cordova项目来验证
# 创建项目步骤如上
# 添加插件
# js-调用,打包测试