Android 使用SmsManager发送短信
来源:互联网 发布:linux应用程序开发详解 编辑:程序博客网 时间:2024/06/16 17:15
SmsManager公有方法:
- ArrayList<</SPAN>String> divideMessage(Stringtext)
当短信超过SMS消息的最大长度时,将短信分割为几块。
参数:text——初始的消息,不能为空
返回值:有序的ArrayList<</SPAN>String>,可以重新组合为初始的消息 - static SmsManagergetDefault()
获取SmsManager的默认实例。
返回值:SmsManager的默认实例 - void SendDataMessage(String destinationAddress,StringscAddress, short destinationPort,byte[] data,PendingIntent sentIntent,PendingIntentdeliveryIntent)
发送一个基于SMS的数据到指定的应用程序端口。
参数:
1)、destinationAddress——消息的目标地址
2)、scAddress——服务中心的地址or为空使用当前默认的SMSC3)destinationPort——消息的目标端口号
4)、data——消息的主体,即消息要发送的数据
5)、sentIntent——如果不为空,当消息成功发送或失败这个PendingIntent就广播。结果代码是Activity.RESULT_OK表示成功,或RESULT_ERROR_GENERIC_FAILURE、RESULT_ERROR_RADIO_OFF、RESULT_ERROR_NULL_PDU之一表示错误。对应RESULT_ERROR_GENERIC_FAILURE,sentIntent可能包括额外的“错误代码”包含一个无线电广播技术特定的值,通常只在修复故障时有用。
每一个基于SMS的应用程序控制检测sentIntent。如果sentIntent是空,调用者将检测所有未知的应用程序,这将导致在检测的时候发送较小数量的SMS。
6)、deliveryIntent——如果不为空,当消息成功传送到接收者这个PendingIntent就广播。
异常:如果destinationAddress或data是空时,抛出IllegalArgumentException异常。 - voidsendMultipartTextMessage
(String destinationAddress,StringscAddress, ArrayList<</SPAN>String> parts,ArrayList<</SPAN>PendingIntent> sentIntents, ArrayList<</SPAN>PendingIntent> deliverIntents)
发送一个基于SMS的多部分文本,调用者应用已经通过调用divideMessage(Stringtext)将消息分割成正确的大小。
参数:
1)、destinationAddress——消息的目标地址
2)、scAddress——服务中心的地址or为空使用当前默认的SMSC
3)、parts——有序的ArrayList<</SPAN>String>,可以重新组合为初始的消息
4)、sentIntents——跟SendDataMessage方法中一样,只不过这里的是一组PendingIntent
5)、deliverIntents——跟SendDataMessage方法中一样,只不过这里的是一组PendingIntent
异常:如果destinationAddress或data是空时,抛出IllegalArgumentException异常。 - voidsendTextMessage(String destinationAddress, String scAddress, String text, PendingIntent sentIntent, PendingIntent deliveryIntent)
发送一个基于SMS的文本。参数的意义和异常前面的已存在的一样,不再累述。
常量:
- public static final intRESULT_ERROR_GENERIC_FAILURE
表示普通错误,值为1(0x00000001) - public static final intRESULT_ERROR_NO_SERVICE
表示服务当前不可用,值为4 (0x00000004) - public static final intRESULT_ERROR_NULL_PDU
表示没有提供pdu,值为3 (0x00000003) - public static final intRESULT_ERROR_RADIO_OFF
表示无线广播被明确地关闭,值为2 (0x00000002) - public static final intSTATUS_ON_ICC_FREE
表示自由空间,值为0 (0x00000000) - public static final intSTATUS_ON_ICC_READ
表示接收且已读,值为1 (0x00000001) - public static final intSTATUS_ON_ICC_SENT
表示存储且已发送,值为5 (0x00000005) - public static final intSTATUS_ON_ICC_UNREAD
表示接收但未读,值为3 (0x00000003) - public static final intSTATUS_ON_ICC_UNSENT
表示存储但为发送,值为7 (0x00000007)
例子:
package lab.sodino.servicecenteraddress;
import android.app.Activity;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.telephony.gsm.SmsManager;
import android.telephony.gsm.SmsMessage;
import android.view.Gravity;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.LinearLayout.LayoutParams;
public class ServiceCenterAddressAct extends Activity {
private static final String ACTION_SMS_SEND ="lab.sodino.sms.send";
private static final String ACTION_SMS_DELIVERY ="lab.sodino.sms.delivery";
private static final String ACTION_SMS_RECEIVER ="android.provider.Telephony.SMS_RECEIVED";
private TextView serviceCenterAddressText
private SMSReceiver sendReceiver;
private SMSReceiver deliveryReceiver;
private SMSReceiver smsReceiver;
@Override
public void onCreate(Bundle savedInstanceState) {
}
protected void onPause() {
}
private void sendSms() {
}
public class SMSReceiver extends BroadcastReceiver {