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文件夹下会多出一个文件
在这里插入图片描述
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-调用,打包测试

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值