Android开发监听短信数据库

时间:2021-07-02 08:56:38

之前写过一篇关于Android开发监听短信的文章,是通过注册一个广播来监听有短信过来的时候读取短信。但是有些手机比如小米手机系统默认把短息最高权限给系统短息,所以当收到短信的时候无法监听。今天跟大家分享另一种方式,通过监听短信数据库来监听短信。

首先写一个内部类继承ContentObserver,java代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">class SmsContent extends ContentObserver {

public SmsContent(Handler handler) {
super(handler);
}

/**
* @Description 当短信表发送改变时,调用该方法 需要两种权限 android.permission.READ_SMS读取短信
* android.permission.WRITE_SMS写短信
* @Author Snake
* @Date 2010-1-12
*/
@SuppressLint("NewApi")
@Override
public void onChange(boolean selfChange) {
// TODO Auto-generated method stub
super.onChange(selfChange);
// 读取收件箱中指定号码的短信
Cursor cursor = getContentResolver().query(
Uri.parse("content://sms/inbox"),
new String[] { "_id", "address", "read", "body" },
" address=? and read=? and date > " + (System.currentTimeMillis() - 60 * 1000), new String[] { strDestAddress, "0" ,},
"date desc");

if (cursor.moveToFirst()) {

String SMSContent = cursor.getString(cursor.getColumnIndex("body"));
}</span>

SMSContent就是我们要读取的指定号码发来的短信内容,再根据短信内容做其他操作,我这里就不演示了。

然后在onCreat()里面注册,代码如下:

<span style="font-family:KaiTi_GB2312;font-size:18px;">SmsContent content = new SmsContent(new Handler());
// 注册短信变化监听
this.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, content);</span>
这样就可以监听到短信了。

最后不要忘了在mainfest.xlm里面加上如下权限:

<span style="font-family:KaiTi_GB2312;font-size:18px;"><uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" /></span>

好了,到这里就实现了对短息数据库的监听。

如果需要通过广播方式监听短信,可以阅读我之前的文章:Android开发监听指定号码发来的短信