Cordova使用Plugman创建插件—拨打电话 拨号页面 发送短信

时间:2022-11-09 23:53:58

本章节讲述AndroidStudio使用Plugman生成Cordova插件 拨打电话 拨号页面 发送短信


由于前面已提到cordova的插件生成 在此省略Cordova项目创建以及Plugin插件创建(如有不明白可以查看前面的文章)


直接上代码 

1.此demo涉及到权限问题 所以需要在生成插件的plugin.xml文件配置权限


<config-file parent="/*" target="AndroidManifest.xml">


      <在自动生成的config-file标签找到 parent="/*" target="AndroidManifest.xml"  在此标签下添加权限>


      <!-- Required  一些系统要求的权限,如访问网络等-->


      <!-- 拨打电话权限 -->
      <uses-permission android:name="android.permission.CALL_PHONE" />
 
      <!-- 发送短信权限 -->
      <uses-permission android:name="android.permission.SEND_SMS" />



   
   </config-file>


此时成功导入到Cordova项目中 再将项目导入到AndroidStudio中时

Cordova使用Plugman创建插件—拨打电话 拨号页面 发送短信


就将插件中配置的相应权限加入到Android原生代码中


2.XXXXX.js 部分 CallPhonePlugin.js


cordova.define("org.apache.cordova.callphoneplugin.CallPhonePlugin", function(require, exports, module) {


************************************************************************复制到插件中时 只复制**包括的即可 要不导入到新创建的Cordova项目时会出现重复代码现象 第一行和最后一行


var exec = require('cordova/exec');


//系统自带
exports.coolMethod = function(arg0, success, error) {
    exec(success, error, "CallPhonePlugin", "coolMethod", [arg0]);
};


//后期添加
var CallPhoneFunc = function(){};


//拨打电话
CallPhoneFunc.prototype.call = function(arg0, success, error) {
    exec(success, error, "CallPhonePlugin", "callphone", arg0);
};


//拨号页面
CallPhoneFunc.prototype.dial = function(arg0, success, error) {
    exec(success, error, "CallPhonePlugin", "dialphone", arg0);
};


//发送短信
CallPhoneFunc.prototype.sms = function(arg0, success, error) {
    exec(success, error, "CallPhonePlugin", "smsphone", arg0);
};




var CALLPHONEFUNC = new CallPhoneFunc();
module.exports = CALLPHONEFUNC;




*******************************************************************************************

});


3.插件核心java类  CallPhonePlugin.java

package org.apache.cordova.callphoneplugin;


import android.content.Intent;
import android.net.Uri;


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 CallPhonePlugin extends CordovaPlugin {


    @Override
    public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException {
        if ("callphone".equals(action)) {//拨打电话 action
            String phone=args.getString(0);
            this.callPhone(phone,callbackContext);
            return true;//记得返回 true
        }else if("dialphone".equals(action)){//拨号页面 action
            String phone=args.getString(0);
            this.dialPhone(phone,callbackContext);
            return true;//记得返回 true
        }else if("smsphone".equals(action)){//发送短信 action
            String phone=args.getString(0);
            String smscontent=args.getString(1);
            this.smsPhone(phone,smscontent,callbackContext);
            return true;//记得返回 true
        }
        return false;
    }


    //拨打电话
    private void callPhone(String phone,CallbackContext callbackContext){
        if("".equals(phone)||"null".equals(phone)||null==phone){//手机号不可为空
            callbackContext.error("Phone number must not be empty!");
        }else{//手机号码正确无误
            Intent intent=new Intent();
            intent.setAction("android.intent.action.CALL");
            Uri uri=Uri.parse("tel:" + phone);
            intent.setData(uri);
            cordova.getActivity().startActivity(intent);
        }
    }


    //拨号页面
    private void dialPhone(String phone,CallbackContext callbackContext){
        if("".equals(phone)||"null".equals(phone)||null==phone){//手机号码为空
            callbackContext.error("Phone number must not be empty!");
        }else{//手机号码正确无误
            Intent intent=new Intent();
            intent.setAction("android.intent.action.DIAL");
            Uri uri=Uri.parse("tel:"+phone);
            intent.setData(uri);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            cordova.getActivity().startActivity(intent);
        }
    }


    //发送短信
    private void smsPhone(String phone,String smscontent,CallbackContext callbackContext){
        if("".equals(phone)||"null".equals(phone)||null==phone){//手机号为空
            callbackContext.error("Phone number must not be empty!");
        }else{
            if("".equals(smscontent)||"null".equals(smscontent)||null==smscontent){//短信内容为空
                callbackContext.error("Text messages cannot be empty!");
            }else{//手机号和短信内容均不为空
                Intent intent=new Intent();
                intent.setAction("android.intent.action.SENDTO");
                Uri uri=Uri.parse("smsto:"+phone);
                intent.setData(uri);
                intent.putExtra("sms_body",smscontent);
                cordova.getActivity().startActivity(intent);
            }
        }
    }


}



4.index.html(测试调用插件)


<!DOCTYPE html>
<html>
<head>
    <title>Hello World</title>
</head>
<body>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
<hr>
<hr>
<hr>
<button onclick="CALLMethod();">CALLPhone</button>
<hr>
<hr>
<hr>
<button onclick="DIALMethod();">DIALPhone</button>
<hr>
<hr>
<hr>
<button onclick="SMSMethod();">SMSPhone</button>
<hr>
<hr>
<hr>
</body>
</html>



5.index.js(测试调用插件)


//js 定义调用拨打电话方法
function CALLMethod(){
cordova.plugins.CallPhonePlugin.call(["17710028976",""],success , error);
}


//js 定义调用拨号页面方法
function DIALMethod(){
cordova.plugins.CallPhonePlugin.dial(["17710028976",""],success , error);
}


//js 定义调用发送短信方法
function SMSMethod(){
cordova.plugins.CallPhonePlugin.sms(["17710028976","Cordova SMS"],success , error);
}


function success(msg){
console.log(msg);
alert(msg);
}


function error(msg){
console.log(msg);
alert(msg);
}


6.运行结果


Cordova使用Plugman创建插件—拨打电话 拨号页面 发送短信



拨打电话

Cordova使用Plugman创建插件—拨打电话 拨号页面 发送短信


拨号页面

Cordova使用Plugman创建插件—拨打电话 拨号页面 发送短信



发送短信

Cordova使用Plugman创建插件—拨打电话 拨号页面 发送短信



至此 一个简单的 拨打电话 拨号页面 发送短信 的Cordova插件就已成功创建。