Andorid 截取短信的内容(MVP,双进程保活,请看源码)
参考:https://blog.csdn.net/u013456079/article/details/68061322
一共有两种方式:
方式一:通过广播监听短信信息
这种方式只能在接收到短信的时候读取到,并不能读取到之前的短信
1.首先加入权限
6.0需要动态权限申请,具体代码看源码
2.注册广播接收器,建议动态注册,因为8.0后不支持静态注册
//1.实例化BroadcastReceiver子类 & IntentFilter
mSmsReceiver = new SmsReceiver();
IntentFilter intentFilter = new IntentFilter();
// 2.设置接收广播的类型
intentFilter.addAction(SMS_RECEIVED_ACTION);
// 3.动态注册:调用Context的RegisterReceiver()方法
registerReceiver(mSmsReceiver,intentFilter);
3.自定义广播接收器
public class SmsReceiver extends BroadcastReceiver {
private static final String TAG = SmsReceiver.class.getSimpleName();
private String receiveTime = "";
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
SmsMessage msg;
long time;
if (null != bundle) {
Object[] smsObj = (Object[]) bundle.get("pdus");
StringBuilder sb = new StringBuilder();
String number = "";
String status = "";
for (Object object : smsObj) {
msg = SmsMessage.createFromPdu((byte[]) object);
number = msg.getOriginatingAddress();
System.out.println("number:" + msg.getOriginatingAddress()
+ " body:" + msg.getDisplayMessageBody() + " time:"
+ msg.getTimestampMillis());
//在这里写自己的逻辑
}
}
}
}
方法二:通过短信数据库获取短信
/**
* 读取短信库
*/
public void getSmsFromPhone() {
ContentResolver cr = getContentResolver();
String where = "address = '95555' AND type = '1' ";
Cursor cur = cr.query(Constant.SMS_INBOX, projection, where, null, "date desc");
if (null == cur)
return;
int count = cur.getCount();
LOG.e("b","count == " + count);
String status = "";
while (cur.moveToNext()) {
// String number = cur.getString(cur.getColumnIndex("address"));//手机号
//读取指定号码1小时的短信内容
long receiveTime = cur.getLong(cur.getColumnIndex("date"));
long currentTime = System.currentTimeMillis();
if(currentTime - receiveTime > 60 *60 *1000){
continue;
}
String body = cur.getString(cur.getColumnIndex("body"));
//写自己的逻辑
}
cur.close();
}
注意:网上说是1小时可以通过where条件执行,如下,但是自己尝试后一直报错,如果有知道原因的可以留言,谢谢
String where = “address = ‘+8615764226705 AND type = ‘1’ AND date > “+ (System.currentTimeMillis() - 2 * 60 * 60 * 1000);
源码地址:https://download.csdn.net/download/silence_sep/10562709