准备工作
添加权限
<uses-permission android:name="android.permission.SEND_SMS"/> <uses-permission android:name="android.permission.RECEIVE_SMS"/>
注册广播
<receiver android:name=".SMSReceiver"> <intent-filter android:priority="1000"> <action android:name="android.provider.Telephony.SMS_RECEIVED"/> </intent-filter> </receiver>
套路
@Override
public void onReceive(Context context, Intent intent) {
//拿到短信流,可能其中只有一条信息
Object[] objs= (Object[]) intent.getExtras().get("pdus");//短信的固定格式
//拿到已定义的编码格式(该参数为SDK23及以上所需要)
String format=intent.getExtras().getString("format");
//创建一个SMS信息
SmsMessage smsMessage;
for (Object b:objs){
//根据SDK版本实例SMS内容
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) {
smsMessage=SmsMessage.createFromPdu((byte[])b,format);
}else smsMessage=SmsMessage.createFromPdu((byte[])b);
//发件人信息
String sender=smsMessage.getOriginatingAddress();
//短信内容
String body=smsMessage.getMessageBody();
Log.d("phone...","sender:"+sender);
Log.d("phone...","send_body"+body);
if (sender.contains(reject_number)){
//截断短信广播,短信应用不会收到该条信息
abortBroadcast();
Log.d("phone...","abort successed.");
}
if (REPLY){
//发送短信
SmsManager.getDefault().sendTextMessage(sender,null, reply_text,null,null);
Log.d("phone...","reply successed:"+ reply_text);
}
}