uni-app 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可发布到iOS、Android、H5、以及各种小程序(微信/支付宝/百度/头条/QQ/钉钉)等多个平台官网地址
因为业务逻辑需要调用短信功能,但是uni-app 中未提供相关接口。查看uni-app的框架图可以看出
是可以使用native.js去调用的android API的
在这里插入图片描述
native.js 介绍及文档:https://ask.dcloud.net.cn/article/88

于是乎,在百度上搜索了 android 发送短信的 代码 将其改写成native.js调用
原android代码

public void sendMessages(String sPhoneNum, String sMesage, int id){ 
SubscriptionInfo sInfo = null; final SubscriptionManager sManager = (SubscriptionManager)this .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); 
List<SubscriptionInfo> lists = sManager.getActiveSubscriptionInfoList(); 
if(lists == null || lists.isEmpty()){ 
	return; 
}
sInfo = lists.get(id); 
if(sInfo != null){ 
int subId = sInfo.getSubscriptionId(); 
SmsManager managers = SmsManager.getSmsManagerForSubscriptionId(subId); 			 	
ArrayList<String> arrayListlist = managers.divideMessage(sMesage);
managers.sendMultipartTextMessage(sPhoneNum,null,arrayLis tlist,null,null); 
	} 
}

native.js代码:
//通过native.js 调用android API 发送短信

sendMessage1() {
 if (plus.os.name == "Android") {					
	//获取当前MainActivity
	var main = plus.android.runtimeMainActivity();
	//获取SystemService
	var sManager = main.getSystemService("telephony_subscription_service");
	console.log(sManager);
	//获取所有卡列表
	var subscriptionInfoList = plus.android.invoke(sManager,"getActiveSubscriptionInfoList");
	//获取卡信息   
	var sInfo = plus.android.invoke(subscriptionInfoList,"get",0);
	//获取卡id
	var id = plus.android.invoke(sInfo,"getSubscriptionId");
	console.log(id);
	//获取卡id获取SMSManagers对象
	var managers = plus.android.invoke("android.telephony.SmsManager","getSmsManagerForSubscriptionId",id);
	var eMessage = "哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈--------------";
	//分割短信内容 短信规定不能大于70字,大于70会被分割,分开发送
	var list = plus.android.invoke(managers,"divideMessage",eMessage);
	//发送短信
	var returns = plus.android.invoke(managers,"sendMultipartTextMessage","188****1189",null,list,null,null);		
}

另附一种解决方案 使用H5+掉起系统的短信发送界面

// 通过 h5+ 掉起 系统短信发送界面
			sendMessage2() {
				//创建一条信息  短信/彩信/邮件
				var msg = plus.messaging.createMessage(plus.messaging.TYPE_SMS); 
					msg.to = ['18829221189'];  //发给谁
					msg.body = '艾欧尼亚昂扬不灭';
					// msg.silent = true;  静默发送(后台发送) 不好使
					//发送信息
					plus.messaging.sendMessage(msg,
					function (){
						uni.showModal({
							content: 'successs',
							showCancel: false
						});
					},function(){
						uni.showModal({
							content: 'error',
							showCancel: false
						});
					});
Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐