/**
*
*/
package org.orange.familylink.sms;
import java.util.ArrayList;
import org.orange.familylink.BuildConfig;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.telephony.PhoneNumberUtils;
import android.telephony.SmsManager;
import android.text.TextUtils;
import android.util.Log;
/**
* 短信发送Helper类
* @author Team Orange
*/
public class SmsSender {
private static final String TAG = SmsSender.class.getSimpleName();
/**
* 发送消息
* @param context 上下文环境
* @param messageUri 消息{@link Uri}
* @param message 要发动的消息内容
* @param dest 目的地址,如手机号
* @throws IllegalArgumentException 当message或dest为空时
*/
public static void sendMessage(Context context, Uri messageUri, String message, String dest) {
if(TextUtils.isEmpty(message) || TextUtils.isEmpty(dest))
throw new IllegalArgumentException("message or dest address shouldn't be empty.");
// remove spaces and dashes from destination number
// (e.g. "801 555 1212" -> "8015551212")
// (e.g. "+8211-123-4567" -> "+82111234567")
dest = PhoneNumberUtils.stripSeparators(dest);
SmsManager smsManager = SmsManager.getDefault();
ArrayList<String> messages = smsManager.divideMessage(message);
int messagesCount = messages.size();
ArrayList<PendingIntent> deliveryIntents = new ArrayList<PendingIntent>(messagesCount);
ArrayList<PendingIntent> sentIntents = new ArrayList<PendingIntent>(messagesCount);
//最后一条短信发送后才改变消息状态
for(int i = 0 ; i < (messagesCount - 1) ; i++) {
sentIntents.add(null);
deliveryIntents.add(null);
}
Intent intent = new Intent(SmsIntent.MESSAGE_SENT_ACTION, messageUri,
context, SmsStatusReceiver.class);
sentIntents.add(PendingIntent.getBroadcast(context, 0, intent, 0));
intent = new Intent(SmsIntent.MESSAGE_DELIVERED_ACTION, messageUri,
context, SmsStatusReceiver.class);
deliveryIntents.add(PendingIntent.getBroadcast(context, 0, intent, 0));
if(BuildConfig.DEBUG)
Log.v(TAG, "Sending message in " + messages.size() + " parts");
try {
smsManager.sendMultipartTextMessage(dest, null, messages, sentIntents, deliveryIntents);
} catch (Exception ex) {
Log.e(TAG, "SmsSender.sendMessage: caught", ex);
throw new RuntimeException("SmsSender.sendMessage: caught " + ex +
" from SmsManager.sendMultipartTextMessage()", ex);
}
}
}