写于2017年3月31日
android发短信两种方式
1.调用系统发短信功能:
public void sendSMS(String phoneNumber,String message){
if(PhoneNumberUtils.isGlobalPhoneNumber(phoneNumber)){
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber));
intent.putExtra("sms_body", message);
startActivity(intent);
}
}
2.调用SmsManager:
public void sendSMS(String phoneNumber,String message){
//获取短信管理器
SmsManager smsManager = SmsManager.getDefault();
//拆分短信内容(短信长度显示)
List<String> divideContents = smsManager.divideMessage(message);
for (String text : divideContents) {
smsManager.sendTextMessage(phoneNumber, null, text, sentPI, deliverPI);
}
}
第一种的好处是简单,缺点是没有发送成功和接收成功的回调。
第二种的好处是有回调。
当短信长度中文大于70个字节,英文大于160个字节的时候,短信就需要分段发送了,否则不能发送。
如果调用sendTextMessage()方法的话,就需要对短信进行分段,同时接受者也会收到分段的短信,感觉效果不是很好,可以使用sendMultipartTextMessage这个方法,这个方法虽然也是分段发送,但是接收到的是一整坨热乎乎的短信。
SmsManager smsm = SmsManager.getDefault();
ArrayList<String> divideContents = smsm.divideMessage(message);
ArrayList<PendingIntent> pendingIntents = new ArrayList<>();
pendingIntents.add(sentPI);
smsm.sendMultipartTextMessage(number, null, divideContents, pendingIntents, null);
以上是简单举例 不是完整代码
方式二的回调:
//处理返回的发送状态
String SENT_SMS_ACTION = "SENT_SMS_ACTION";
Intent sentIntent = new Intent(SENT_SMS_ACTION);
PendingIntent sentPI = PendingIntent.getBroadcast(context, 0, sentIntent, 0);
context.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context _context, Intent _intent) {
switch (getResultCode()) {
case Activity.RESULT_OK:
Toast.makeText(context, "短信发送成功", Toast.LENGTH_SHORT) .show();
break;
case SmsManager.RESULT_ERROR_GENERIC_FAILURE:
break;
case SmsManager.RESULT_ERROR_RADIO_OFF:
break;
case SmsManager.RESULT_ERROR_NULL_PDU:
break;
}
}
}, new IntentFilter(SENT_SMS_ACTION));
//处理返回的接收状态
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";
// create the deilverIntent parameter
Intent deliverIntent = new Intent(DELIVERED_SMS_ACTION);
PendingIntent deliverPI = PendingIntent.getBroadcast(context, 0, deliverIntent, 0);
context.registerReceiver(new BroadcastReceiver() {
@Override
public void onReceive(Context _context, Intent _intent) {
Toast.makeText(context, "收信人已经成功接收", Toast.LENGTH_SHORT) .show();
}
}, new IntentFilter(DELIVERED_SMS_ACTION));