我向多个收件人发送邮件的方式如下:
public void send(List<User> participants,
Func1<User, String> messageTextCallback,
Subscriber<SendingProgress> subscriber) { // TODO: throw error
Observable<SendingProgress> observable = Observable.create(sub -> {
String unequalSmsSentAction = UUID.randomUUID().toString();
context.registerReceiver(new BroadcastReceiver() {
private int totalToSend = participants.size();
private int sentCounter = 0;
@Override
public void onReceive(Context arg0, Intent arg1) {
switch (getResultCode()) {
case Activity.RESULT_OK:
sub.onNext(
new SendingProgress(totalToSend, ++sentCounter)
);
if(sentCounter == totalToSend) {
sub.onCompleted();
context.unregisterReceiver(this);
}
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
case SmsManager.RESULT_ERROR_NO_SERVICE:
case SmsManager.RESULT_ERROR_NULL_PDU:
case SmsManager.RESULT_ERROR_RADIO_OFF:
subscriber.onError(new SendSmsException());
sub.onCompleted();
}
}
}, new IntentFilter(unequalSmsSentAction));
int totalToSend = participants.size();
for(int i = 0; i < totalToSend; i++) {
User participant = participants.get(i);
logger.d(TAG, "sending to: " + participant.getUsername());
PendingIntent sentPi = PendingIntent.getBroadcast(context, 0, new Intent(unequalSmsSentAction), 0);
smsManager.sendTextMessage(
participant.getPhones().get(0),
null,
messageTextCallback.call(participant),
sentPi,
null
);
}
});
observable
.subscribeOn(ioScheduler)
.observeOn(mainThreadScheduler)
.subscribe(subscriber);
}
此代码为每个用户的电话号码调用SmsManager.sendTextMessage(...)
。
BroadcastReceiver
收到每封已发送的邮件,并通知订阅者。我想在BroadcastReceiver.onReceive
内获取短信收件人的电话号码,以便通过SendingProgress
。
有没有办法做到这一点? 我应该同步发送多条短信吗?
答案 0 :(得分:1)
有没有办法做到这一点?
第1步:将您想要的信息添加到unequalSmsSentAction
Intent
步骤2:为每个PendingIntent
使用唯一ID(getBroadcast()
来电的第二个参数,0
- 将其替换为每条短信的不同值)
第3步:阅读Intent
发送到BroadcastReceiver
但是,任何应用都可以收听您的unequalSmsSentAction
广播。理想情况下,将Intent
中的额外值设置为您可用于查找电话号码的内容,但接收这些广播的任何其他应用都无法使用该值。
我应该同步发送多条短信吗?
AFAIK,你不能同步发送它们。