android发送短信,以及接收报告和发送报告
android中发送短信其实有两种方式,这个和打电话类似,大家可以了解一下:
一、调起系统发短信功能
代码如下:
/*** 调起系统发短信功能
*@paramphoneNumber 发送短信的接收号码
*@parammessage 短信内容*/
public voidSendSMS(String phoneNumber,String message){
Intent intent= new Intent(Intent.ACTION_SENDTO, Uri.parse("smsto:"+phoneNumber));
intent.putExtra("sms_body", message);
startActivity(intent);
}
二、调用系统短信接口直接发送短信
首先先介绍一下,发送短信相关的api,主要依靠的是
sendTextMessage (String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
destinationAddress 发送短信的地址(也就是号码)
scAddress 短信服务中心,如果为null,就是用当前默认的短信服务中心
text 短信内容
sentIntent 如果不为null,当短信发送成功或者失败时,这个PendingIntent会被广播出去成功的结果代码是Activity.RESULT_OK,或者下面这些错误之一 :RESULT_ERROR_GENERIC_FAILURE,RESULT_ERROR_RADIO_OFF,RESULT_ERROR_NULL_PDU等
通俗点说: 发送-->中国移动 --> 中国移动发送失败 --> 返回发送成功或失败信号 -->后续处理 即,这个意图包装了短信发送状态的信息
deliveryIntent 如果不为null,当这个短信发送到接收者那里,这个PendtingIntent会被广播,状态报告生成的pdu(指对等层次之间传递的数据单位)会拓展到数据("pdu")
通俗点就是:发送-->中国电信 --> 中国电信发送成功 --> 返回对方是否收到这个信息 --> 后续处理 即:这个意图包装了短信是否被对方收到的状态信息(供应商已经发送成功,但是对方没有收到)。
正式开始操作
1.首先要添加权限!
2.发送短信的核心代码:
(1)如果你不需要发送报告,那么直接使用:
/*** 直接调用短信接口发短信,不含发送报告和接受报告
*
*@paramphoneNumber
*@parammessage*/
public voidsendSMS(String phoneNumber, String message) {//获取短信管理器
android.telephony.SmsManager smsManager =android.telephony.SmsManager.getDefault();//拆分短信内容(手机短信长度限制)
List divideContents =smsManager.divideMessage(message);for(String text : divideContents) {
smsManager.sendTextMessage(phoneNumber,null, text, null, null);
}
}
(2)如果你需要发送报告和接收报告,那么我们开始:
我们先定义两个接受方法,用作接收发送报告以及接收报告
发送报告
//处理返回的发送状态
String SENT_SMS_ACTION = "SENT_SMS_ACTION";
Intent sentIntent= newIntent(SENT_SMS_ACTION);
PendingIntent sendIntent= PendingIntent.getBroadcast(context, 0, sentIntent,0);//register the Broadcast Receivers
context.registerReceiver(newBroadcastReceiver() {
@Overridepublic voidonReceive(Context _context, Intent _intent) {switch(getResultCode()) {caseActivity.RESULT_OK:
Toast.makeText(context,"短信发送成功", Toast.LENGTH_SHORT)
.show();break;caseSmsManager.RESULT_ERROR_GENERIC_FAILURE:break;caseSmsManager.RESULT_ERROR_RADIO_OFF:break;caseSmsManager.RESULT_ERROR_NULL_PDU:break;
}
}
},new IntentFilter(SENT_SMS_ACTION));
接收报告
//处理返回的接收状态
String DELIVERED_SMS_ACTION = "DELIVERED_SMS_ACTION";//create the deilverIntent parameter
Intent deliverIntent = newIntent(DELIVERED_SMS_ACTION);
PendingIntent backIntent= PendingIntent.getBroadcast(context, 0,
deliverIntent,0);
context.registerReceiver(newBroadcastReceiver() {
@Overridepublic voidonReceive(Context _context, Intent _intent) {
Toast.makeText(context,"收信人已经成功接收", Toast.LENGTH_SHORT)
.show();
}
},new IntentFilter(DELIVERED_SMS_ACTION));
发送短信代码:
/*** 调用短信接口发短信,含接收报告和发送报告
*
*@paramphoneNumber
*@parammessage*/
public voidsendSMS(String phoneNumber, String message) {//获取短信管理器
android.telephony.SmsManager smsManager =android.telephony.SmsManager.getDefault();//拆分短信内容(手机短信长度限制)
List divideContents =smsManager.divideMessage(message);for(String text : divideContents) {
smsManager.sendTextMessage(phoneNumber,null, text, sendIntent, backIntent);
}
}