发送单条短信:
private void sendSingleSms(String phone, String content) {
SmsManager smsManager = SmsManager.getDefault();
List<String> texts = smsManager.divideMessage(content);
// 发送之前检查短信内容是否为空
for (int i = 0; i < texts.size(); i++) {
String text = texts.get(i);
Intent itSend = new Intent(INTENT_SEND_STATE);
PendingIntent mSendPI = PendingIntent.getBroadcast(getApplicationContext(), 0, itSend, PendingIntent.FLAG_ONE_SHOT);// 这里requestCode和flag的设置很重要,影响数据KEY_PHONENUM的传递。
smsManager.sendTextMessage(phone, null, content, mSendPI, null);
}
}
关于上面的sendTextMessage方法的第三个参数mSendPI, 它是短信发送结果的一个返回, 当短信 发送成功/发送失败 的时候就会执行该 PendingIntent, 我这里是让他发送一个广播.
广播接收器:
private BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (getResultCode() == RESULT_OK)
success_count++;
else
fail_count++;
setSendTitle(success_count, fail_count);
if ((success_count + fail_count) == phone_numbers.size()) {
showToast("短信已全部发送");
}
}
};
RESULT_OK即成功, 否则是失败.
另外附上发送多条短信的方法:
private void sendSms(ArrayList<String> phone_numbers, String content) {
try {
runOnUiThread(new Runnable() {
@Override
public void run() {
setSendTitle(success_count, fail_count);
}
});
for (String phone_number : phone_numbers) {
sendSingleSms(phone_number, content);
}
} catch (Exception e) {
showToast("获取权限失败");
}
}