Andriod读取短信内容和监听手机新收到的短信

首先添加权限

<!-- 发送短信-->
<uses-permission android:name="android.permission.SEND_SMS" />
<!-- 阅读消息 -->
<uses-permission android:name="android.permission.READ_SMS" />
<!-- 写入消息 -->
<uses-permission android:name="android.permission.WRITE_SMS" />
<!-- 接收消息 -->
<uses-permission android:name="android.permission.RECEIVE_SMS" />

 

获取手机短信内的第一条信息

private Uri SMS_INBOX = Uri.parse("content://sms/");
    public void getSmsFromPhone() {
    ContentResolver cr = getContentResolver();
    String[] projection = new String[] { "body" };//"_id", "address", "person",, "date", "type
    String where = " address = '10010' " ;
    Cursor cur = cr.query(SMS_INBOX, projection, null, null, "date desc");
    if (null == cur)
    return;
    if(cur.moveToNext()) {
        // int number = cur.getInt(cur.getColumnIndex("address"));//手机号
        // String name = cur.getString(cur.getColumnIndex("person"));//联系人姓名列表
        String body = cur.getString(cur.getColumnIndex("body"));
        System.out.println(" **************"+body);
        //这里我是要获取自己短信服务号码中的验证码~~
        Pattern pattern = Pattern.compile(" [a-zA-Z0-9]{10}");
        Matcher matcher = pattern.matcher(body);
        if (matcher.find()) {
            String res = matcher.group().substring(1, 11);
            System.out.println("======》"+res);
        }
    }
}

 

监听手机新来短信

首先注册一个广播

public class SmsReciver extends BroadcastReceiver

在AndroidManifest.xml注册

<receiver android:name=".SmsReciver" >
<intent-filter android:priority="999">
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
</intent-filter>
</receiver>

广播类里

public class SmsReciver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        System.out.println("监听到来短信");
        Bundle bundle = intent.getExtras();
        SmsMessage msg = null;
        if (null != bundle) {
            Object[] smsObj = (Object[]) bundle.get("pdus");
            for (Object object : smsObj) {
            msg = SmsMessage.createFromPdu((byte[]) object);
            Date date = new Date(msg.getTimestampMillis());//时间
            SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            String receiveTime = format.format(date);
            System.out.println("number:" + msg.getOriginatingAddress()
            + " body:" + msg.getDisplayMessageBody() + " time:"
            + msg.getTimestampMillis());
            //在这里写自己的逻辑
            if (msg.getOriginatingAddress().equals("10086")) {
            //TODO
            }
        }
    }
}