我从NativeScript移动应用程序发送短信,这是以下代码:
sendSms(numbers, body) {
let sms = android.telephony.SmsManager.getDefault();
sms.sendTextMessage(numbers, null, body, null, null);
}
SMS使用这段代码成功发送,但是如果SMS已成功发送给我的应用程序用户,我想收到回复。
如果它是承诺的话:
sms.sendTextMessage(numbers, null, body, null, null).then(res => {
if(res=='success') someCode;
})
关于如何实现这一目标的任何想法?
感谢。
答案 0 :(得分:2)
正如Archer建议的那样,使用PendingIntents会在发送和/或发送短信时收到通知。
PendingIntent.getBroadcast() - 将检索PI实例。
var pISent = android.app.PendingIntent.getBroadcast(context, 0, new android.content.Intent(android.telephony.SmsManager.STATUS_ON_ICC_SENT), 0);
sms.sendTextMessage(numbers, null, body, pISent, null);
详细了解Android文档中的待处理意图,以便更好地了解Android的工作原理 - https://developer.android.com/reference/android/app/PendingIntent.html
答案 1 :(得分:2)
感谢大家的帮助,我已经查看了PendingIntent android参考资料,并且我已经编写了一个简单的NativeScript x TypeScript x Angular解决方案来实现这一目标。
以下是其他人在将来寻找它的情况。
import * as app from "tns-core-modules/application";
import * as utils from "utils/utils";
@Injectable()
export class SmsService {
context = utils.ad.getApplicationContext();
socket;
constructor() {
}
sendSms(numbers, body) {
let id = 'messageSent';
let pendingIntent = this.pendingIntent(id);
let sms = android.telephony.SmsManager.getDefault();
sms.sendTextMessage(numbers, null, body, pendingIntent, null);
this.broadcastReciever(id, () => {
console.log('This should call after sent.');
})
}
broadcastReciever(id, cb) {
app.android.registerBroadcastReceiver(id, () => {
cb();
});
}
pendingIntent(id) {
let intent = new android.content.Intent(id);
return android.app.PendingIntent.getBroadcast(this.context, 0, intent, 0);
}
快速编辑:在回调的broadcastReciever()
功能中,您必须取消注册接收器,因为每次发送短信时它都会注册新的接收器,所以这就是现在的样子:
sendSms(numbers, body) {
let sms = android.telephony.SmsManager.getDefault();
sms.sendTextMessage(numbers, null, body, this.pendingIntentSent, null);
this.broadcastReciever(this.id, () => {
console.log('@@@ SUCCESFULLY SENT @@@');
app.android.unregisterBroadcastReceiver(this.id);
})
}