读取手机第一条短信内容和监听手机新收到的短信

来源:互联网 发布:知乎福利收藏夹 编辑:程序博客网 时间:2024/04/29 16:18
首先添加权限
<!-- 发送短信-->
<uses-permissionandroid:name="android.permission.SEND_SMS"/>
<!-- 阅读消息 -->
<uses-permissionandroid:name="android.permission.READ_SMS"/>
<!-- 写入消息 -->
<uses-permissionandroid:name="android.permission.WRITE_SMS"/>
<!-- 接收消息 -->
<uses-permissionandroid: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 classSmsReciverextendsBroadcastReceiver
在AndroidManifest.xml注册
<receiverandroid:name=".SmsReciver">
<intent-filterandroid:priority="999">
<actionandroid: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
}
}
}
}
}
原创粉丝点击