后来我看到Android 中判断短信发送是否成功的例子,其他的倒也搞出来了,onReceiver 和 action 也都能收到,但是 getResultCode 这个方法实在是无法调用,因广播接收的 receiver 中并没有 getResultCode 这个方法,无法调用。
// 全局变量
const main = plus.android.runtimeMainActivity();
// 发送短信
sendMessageFn(message) {
// message 的结构是 {to:'收件人号码',from:'发件人号码',body:'短信内容'}
plus.android.requestPermissions(
['android.permission.SEND_SMS'],
res => {
if (res.granted.length > 0) {
// phoneNumberList 是本机中的号码组成的数组,在这里是用来确认发件人是否存在
// 它的结构是 [{phoneNumber:'卡槽中的号码',cardIndex:'卡槽的索引'}]
const filterArray = this.phoneNumberList.filter(item => item.phoneNumber === message.from);
if (filterArray.length > 0) {
const fromIndex = filterArray[0].cardIndex;
const sManager = main.getSystemService('telephony_subscription_service');
const subscriptionInfoList = plus.android.invoke(sManager, 'getActiveSubscriptionInfoList');
let sInfo;
if (fromIndex === 0) {
//获取卡信息
sInfo = plus.android.invoke(subscriptionInfoList, 'get', 0);
}
if (fromIndex === 1) {
//获取卡信息
sInfo = plus.android.invoke(subscriptionInfoList, 'get', 1);
}
//获取卡id
const id = plus.android.invoke(sInfo, 'getSubscriptionId');
//获取卡id获取SMSManagers对象
const managers = plus.android.invoke('android.telephony.SmsManager', 'getSmsManagerForSubscriptionId', id);
//分割短信内容 短信规定不能大于70字,大于70会被分割,分开发送
const list = plus.android.invoke(managers, 'divideMessage', message.body);
// 创建 sentIntent 参数
const sentIntent = new Intent(SENT_SMS_ACTION);
const sentPI = PendingIntent.getBroadcast(main, 0, sentIntent, PendingIntent.FLAG_CANCEL_CURRENT);
//发送短信
const listLen = list.size();
for (let i = 0; i < listLen; i++) {
const tmp = list.get(i);
plus.android.invoke(managers, 'sendTextMessage', message.to, null, tmp, sentPI, null);
}
} else {
console.log('本机不存在当前号码');
}
}
},
err => {
console.log('获取短信权限失败时触发', err);
}
);
}
// 广播接收
const receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver',{
onReceive: function(context, intent) {
// Android 中可以在这里调用 getResultCode,但是 nativeJS 要怎么调用呢?
// 已经尝试过
// plus.android.invoke(receiver, 'getResultCode'); 返回 undefined
// receiver.getResultCode(); 返回 null
var action = intent.getAction();
console.log('action', action);
}
});
4 个回复
落嘤神斧 (作者)
后来我看到Android 中判断短信发送是否成功的例子,其他的倒也搞出来了,onReceiver 和 action 也都能收到,但是 getResultCode 这个方法实在是无法调用,因广播接收的 receiver 中并没有 getResultCode 这个方法,无法调用。
落嘤神斧 (作者)
为什么不用 plus.messaging?
因为这里面的 from 只有在监听短信接收的时候可以看到,发送的时候设置无效,只能是默认卡。所以想要设置发件人是不行的。最后我只能通过 Android 中的 API 实现双卡短信的发送。
落嘤神斧 (作者)
发现是在定义广播接收的 'io.dcloud.feature.internal.reflect.BroadcastReceiver' 这个类中,并不存在 getResultCode 这个方法,所以无法获取短信发送是否成功
鑫辰大海
请问这个问题,最终是怎么解决的?