android端的cordova插件开发(基础篇)

重要前提:

首先明确1件事情,那就是有2个项目,主项目(myapp1)和插件项目(pluginDemo),释义如下:
1.主项目(myapp1):这是需要导入插件的项目。
2.插件项目(pluginDemo):这是个新建插件的项目,可以理解为,插件都由这个项目来管理。
设定需求是:新建一个cordova插件,专门处理微信接口的功能。如打开微信,跳转到微信小程序等功能。

一、创建插件

1、创建插件并初始化
这里请注意,插件id命名不能含有横杠“-”,不然会导致编译不通过,安卓的包名不支持包含横杠的包名。

//切换到插件项目跟目录下
cd E:\cordovaProjects\pluginDemo
//创建插件plugman create --name [插件名] --plugin_id [插件id] --plugin_version [插件版本]
plugman create --name wxUt --plugin_id com.wx.ut --plugin_version 1.0.0
//进入插件目录,然后初始化插件
npm init

操作过程如下图


1.创建插件

2、添加插件的平台

//为插件添加平台:android和ios
plugman platform add --platform_name android
2创建插件

3、编辑wxUt插件的配置文件(plugin.xml)


3创建插件

内容如下:



    wxUt
    
    
        
        
        
    
    
    
        
            
                
            
        
        
        
        
        
        
        
    
    
    
        
            
                
            
        
        
    

4、编辑插件js文件

var exec = require('cordova/exec');
//输入安卓日志(测试联调时最佳)
exports.log = function (arg0, success, error) {
    exec(success, error, 'wxUt', 'log', [arg0]);
};
//吐司
exports.toast = function (arg0, success, error) {
    exec(success, error, 'wxUt', 'toast', [arg0]);
};
//打开微信
exports.toWechat = function (arg0, success, error) {
    exec(success, error, 'wxUt', 'toWechat', [arg0]);
};
//打开微信小程序
exports.toWechatApplets = function (arg0, success, error) {
    exec(success, error, 'wxUt', 'toWechatApplets', [arg0]);
};

5、修改wxUt.class文件

package com.wx.ut;

import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.widget.Toast;

import com.tencent.mm.opensdk.constants.ConstantsAPI;
import com.tencent.mm.opensdk.modelbiz.WXLaunchMiniProgram;
import com.tencent.mm.opensdk.openapi.IWXAPI;
import com.tencent.mm.opensdk.openapi.WXAPIFactory;

import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaPlugin;
import org.json.JSONArray;
import org.json.JSONException;

/**
 * This class echoes a string called from JavaScript.
 *
 * @author Administrator
 */
public class wxUt extends CordovaPlugin {

    @Override
    public boolean execute ( String action, JSONArray args, CallbackContext callbackContext ) throws JSONException {
        try {
            switch ( action ) {
                case "log":
                    log ( args.getString ( 0 ) );
                    return true;
                case "toast":
                    toast ( args.getString ( 0 ) );
                    return true;
                case "toWechat":
                    openWeChat ( cordova.getActivity ( ) );
                    return true;
                case "openAppletLink":
                    String username = args.getString ( 0 );
                    String path = args.getString ( 1 );
                    openAppletLink ( cordova.getActivity ( ), username, path );
                    return true;
                default:
                    return false;
            }
        } catch ( Exception e ) {
            android.util.Log.e ( "excc", e.getMessage ( ) );
            callbackContext.error ( e.getMessage ( ) );
            return false;
        }
    }

    private void log ( String s ) {
        android.util.Log.i ( "excc", s );
    }

    private void toast ( String s ) {
        Toast.makeText ( cordova.getContext ( ), s, Toast.LENGTH_SHORT ).show ( );
    }

    private void openWeChat ( Activity activity ) {
        log ( "正在打开微信" );
        Intent lan = activity.getPackageManager ( ).getLaunchIntentForPackage ( "com.tencent.mm" );
        Intent intent = new Intent ( Intent.ACTION_MAIN );
        intent.addCategory ( Intent.CATEGORY_LAUNCHER );
        intent.addFlags ( Intent.FLAG_ACTIVITY_NEW_TASK );
        intent.setComponent ( lan.getComponent ( ) );
        activity.startActivity ( intent );
    }

    public static final String APP_ID = "wxfa842d455a2c1100";
    private BroadcastReceiver broadcastReceiver;

    private void openAppletLink ( Activity activity, String username, String path ) {
        log ( "微信小程序用户名:" + username + ",路径:" + path );
        IWXAPI api = WXAPIFactory.createWXAPI ( activity, APP_ID, true );
        broadcastReceiver = new BroadcastReceiver ( ) {
            @Override
            public void onReceive ( Context context, Intent intent ) {
                log ( "将该app注册到微信----------------------" );
                // 将该app注册到微信
                api.registerApp ( APP_ID );
            }
        };
        activity.registerReceiver ( broadcastReceiver,
                new IntentFilter ( ConstantsAPI.ACTION_REFRESH_WXAPP ) );
        WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req ( );
        // 填小程序原始id
        req.userName = username;
        //拉起小程序页面的可带参路径,不填默认拉起小程序首页,对于小游戏,可以只传入 query 部分,来实现传参效果,如:传入 "?foo=bar"。
        req.path = path;
        // 可选打开 开发版,体验版和正式版
        req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;
        api.sendReq ( req );
    }

    @Override
    public void onDestroy ( ) {
        if ( broadcastReceiver != null ) {
            cordova.getActivity ( ).unregisterReceiver ( broadcastReceiver );
        }
        super.onDestroy ( );
    }
}

二、添加到主项目

1、检查主项目是否已添加android平台支持

cordova platform ls
image.png

2、在住项目中添加插件

#在需要的项目中添加插件cordova plugins add [插件目录]
cordova plugins add E:\cordovaProjects\pluginDemo\wxUt
添加插件

三、开始验证插件

直接在主项目的index.js文件的初始化方法下调用插件方法,来验证


验证插件

大功告成


image.png

你可能感兴趣的:(android端的cordova插件开发(基础篇))