Cordova 封装 Android插件 ————原生播放mp3文件

一、安装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文件夹下会多出一个文件
Cordova 封装 Android插件 ————原生播放mp3文件_第1张图片
www文件下的js文件时声名给js调用的方法
Cordova 封装 Android插件 ————原生播放mp3文件_第2张图片

修改plugin.xml文件

Cordova 封装 Android插件 ————原生播放mp3文件_第3张图片
修改后的样子




  MyPlugin
  
    
  
  
    
      
        
      
    
    
    
  


初始化npm,生成package.json文件

npm init

Cordova 封装 Android插件 ————原生播放mp3文件_第4张图片

插件创建完成,接下来安装插件到Cordova项目,使用Android Studio 打开Android代码实现插件具体的功能

切换到Cordova项目目录

cd Cordova目录
# 安装插件
cordova plugin add 插件路径

用Android studio 打卡Android项目

Cordova 封装 Android插件 ————原生播放mp3文件_第5张图片
发现刚才的java文件一进导入项目
Cordova 封装 Android插件 ————原生播放mp3文件_第6张图片
我们可以在这里实现播放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文件资源

Cordova 封装 Android插件 ————原生播放mp3文件_第7张图片

把实现需要的java文件和MP3资源文件拷到插件目录下

Cordova 封装 Android插件 ————原生播放mp3文件_第8张图片
Cordova 封装 Android插件 ————原生播放mp3文件_第9张图片

plugin.xml修改,配置文件子啊Android项目下的路径

Cordova 封装 Android插件 ————原生播放mp3文件_第10张图片

插件实现完成

下面我们新创建一个Cordova项目来验证

# 创建项目步骤如上

# 添加插件


# js-调用,打包测试

你可能感兴趣的:(Android)