在Android开发过程中,少不了对短信行为的操作。
一、发送短信
发送短信有时是需要的:
private void sendSMS(String msg, String number) {
// TODO Auto-generated method stub
SmsManager sms=SmsManager.getDefault();
sms.sendTextMessage(number, null, msg, null, null);//发送信息到指定号码
Log.i("sendSMS",number+msg);
Toast.makeText(context, "发送成功", 1).show();
}
当然,发送短信是敏感行为,需要权限:
<uses-permission android:name="android.permission.SEND_SMS" />
二、接收短信
拦截短信需要用到BroadcastReceiver,来接收系统收到短信所发的广播"android.provider.Telephony.SMS_RECEIVED"。
public class SMSReceiver extends BroadcastReceiver {
private String TAG="AutSMS";
Handler hd = new Handler();
//广播消息类型
public static final String SMS_RECEIVED_ACTION = "android.provider.Telephony.SMS_RECEIVED";
//覆盖onReceive方法
@Override
public void onReceive(Context context, Intent intent)
{
// TODO Auto-generated method stub
Log.i(TAG, "引发接收事件");
//StringBuilder body=new StringBuilder("");//短信内容
//StringBuilder sender=new StringBuilder("");//发件人
//先判断广播消息
String action = intent.getAction();
if (SMS_RECEIVED_ACTION.equals(action))
{
//获取intent参数
Bundle bundle=intent.getExtras();
//判断bundle内容
if (bundle!=null)
{
//取pdus内容,转换为Object[]
Object[] pdus=(Object[])bundle.get("pdus");
//解析短信
SmsMessage[] messages = new SmsMessage[pdus.length];
for(int i=0;i<messages.length;i++)
{
byte[] pdu=(byte[])pdus[i];
messages[i]=SmsMessage.createFromPdu(pdu);
}
//解析完内容后分析具体参数
for(SmsMessage msg:messages)
{
//获取短信内容
String content=msg.getMessageBody();
String sender=msg.getOriginatingAddress();
Date date = new Date(msg.getTimestampMillis());
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String sendTime = sdf.format(date);
//TODO:根据条件判断,然后进一般处理
Log.i(TAG,"发送者是:"+sender+";发送的内容是:"+content);
}
}
}
}
}
当然,这也是需要权限的:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />