Manifest.xml添加相应的权限:
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
创建一个BroadcastReceiver来监听短信提醒
import java.text.SimpleDateFormat;
import java.util.Date;
import android.annotation.SuppressLint;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;
import android.util.Log;
public class MessageReceiver extends BroadcastReceiver {
private static OnMessageClickListener mlistener;
public MessageReceiver() {
super();
}
@SuppressLint("SimpleDateFormat")
@Override
public void onReceive(Context context, Intent intent) {
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
for (Object pdu : pdus) {
SmsMessage smsMessage = SmsMessage.createFromPdu((byte[]) pdu);
String sender = smsMessage.getDisplayOriginatingAddress();// 获取发送者地址
String content = smsMessage.getMessageBody();// 获取消息体
long date = smsMessage.getTimestampMillis();// 获取短信时间
Date timeDate = new Date(date);
SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String str = f.format(timeDate);
Log.i("tag", "短信来自:" + sender);
Log.i("tag", "短信内容:" + content);
Log.i("tag", "短信时间:" + str);
mlistener.OnMessageClick(content, sender, str);
// 过滤信息(如果短信来自5556,不再往下传递,一般此号码可以作为短信平台的号码。)
if ("5556".equals(sender)) {
Log.i("tag", "abort");
abortBroadcast();
}
}
}
// 定义一个回调接口
public interface OnMessageClickListener {
void OnMessageClick(String message, String sender, String time);
}
// 获取监听的实例的方法
@SuppressWarnings("static-access")
public void setOnMessageClickListener(OnMessageClickListener listener) {
this.mlistener = listener;
}
}
Manifest.xml注册
<receiver android:name="com.blhcn.listenermessagedome.receiver.MessageReceiver" >
<intent-filter android:priority="1000" >
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>
MainActivity中来展示接收到的一些短信信息
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.blhcn.listenermessagedome.receiver.MessageReceiver;
import com.blhcn.listenermessagedome.receiver.MessageReceiver.OnMessageClickListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;
import android.widget.TextView;
/**
* 监听获取短信消息
*
* @author 990
*
*/
public class MainActivity extends Activity {
private TextView messageTxtv, messageSender, messageTime;
private EditText pwd;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
/**
* 实例化控件,及把监听到的信息展示再TextView上
*/
private void initView() {
messageTxtv = (TextView) findViewById(R.id.message_txtv);
messageSender = (TextView) findViewById(R.id.message_sender);
messageTime = (TextView) findViewById(R.id.message_time);
pwd = (EditText) findViewById(R.id.pwd_edit);
MessageReceiver mReceiver = new MessageReceiver();
mReceiver.setOnMessageClickListener(new OnMessageClickListener() {
@Override
public void OnMessageClick(String message, String sender,
String time) {
messageSender.setText(sender);
messageTxtv.setText(message);
messageTime.setText(time);
// 获取验证码
pwd.setText("您的验证码是:" + getDynamicPwd(message));
}
});
}
/**
* 截取六位动态码 从字符串中截取连续6位数字组合 ([0-9]{" + 6 + "})截取六位数字 进行前后断言不能出现数字
* 用于从短信中获取动态密码
*
* @param pwd
* @return
*/
private String getDynamicPwd(String pwd) {
Pattern pattern = Pattern.compile("(?<![0-9])([0-9]{" + 6
+ "})(?![0-9])");
Matcher matcher = pattern.matcher(pwd);
String dPwd = null;
while (matcher.find()) {
Log.i("tag", matcher.group());
dPwd = matcher.group();
}
return dPwd;
}
}
布局文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<TextView
android:id="@+id/message_sender"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:text="联系人" />
<TextView
android:id="@+id/message_txtv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/message_sender"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:text="接收到的短信消息" />
<TextView
android:id="@+id/message_time"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/message_txtv"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:text="消息时间" />
<EditText
android:id="@+id/pwd_edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/message_time"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:text="验证码"
android:textColor="#00ff00" />
</RelativeLayout>