本章节讲述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中时
就将插件中配置的相应权限加入到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插件就已成功创建。