android查询未读短信,Android实现获取未接来电和未读短信数量的方法

本文实例展示了Android实现获取未接来电和未读短信数量的方法,在Android程序开发中非常常见,是非常实用的功能,现分享给大家供大家参考。具体如下:

一、未读短信

首先注册Observer,当有新短信或彩信来的时候会调用 onChange方法,我们可以在onChange方法中去获取未读短信和彩信,然后做一些UI上的处理!

具体功能代码如下:

private ContentObserver newMmsContentObserver = new ContentObserver(new Handler()) {

public void onChange(boolean selfChange) {

int mNewSmsCount = getNewSmsCount() + getNewMmsCount();

}

};

private void registerObserver() {

unregisterObserver();

getContentResolver().registerContentObserver(Uri.parse("content://sms"), true,

newMmsContentObserver);

getContentResolver().registerContentObserver(MmsSms.CONTENT_URI, true,

newMmsContentObserver);

}

private synchronized void unregisterObserver() {

try {

if (newMmsContentObserver != null) {

getContentResolver().unregisterContentObserver(newMmsContentObserver);

}

if (newMmsContentObserver != null) {

getContentResolver().unregisterContentObserver(newMmsContentObserver);

}

} catch (Exception e) {

Log.e(TAG, "unregisterObserver fail");

}

}

得到未读短信数量:

private int getNewSmsCount() {

int result = 0;

Cursor csr = getContentResolver().query(Uri.parse("content://sms"), null,

"type = 1 and read = 0", null, null);

if (csr != null) {

result = csr.getCount();

csr.close();

}

return result;

}

获取未读彩信数量:

private int getNewMmsCount() {

int result = 0;

Cursor csr = getContentResolver().query(Uri.parse("content://mms/inbox"),

null, "read = 0", null, null);

if (csr != null) {

result = csr.getCount();

csr.close();

}

return result;

}

二、未接来电

未接来电不能用 Observer监听,不过当有新的未接来电时,系统会发送一个广播com.android.phone.NotificationMgr.MissedCall_intent(锁屏上显示的未接来电数量就是通知监听这个广播实现的)

具体功能代码如下:

final IntentFilter filter = new IntentFilter();

filter.addAction("com.android.phone.NotificationMgr.MissedCall_intent");

final Application application = getApplication();

application.registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

String action = intent.getAction();

if (action != null && "com.android.phone.NotificationMgr.MissedCall_intent".equals(action)) {

int mMissCallCount = intent.getExtras().getInt("MissedCallNumber");

}

}

}, filter);

广播只是当有新的未接来电时才会发送,但是如果有旧的未接来电没有读取时,上面的广播就得不到数据了,那就必须得从数据库中查找了。

功能代码如下:

private int readMissCall() {

int result = 0;

Cursor cursor = getContentResolver().query(CallLog.Calls.CONTENT_URI, new String[] {

Calls.TYPE

}, " type=? and new=?", new String[] {

Calls.MISSED_TYPE + "", "1"

}, "date desc");

if (cursor != null) {

result = cursor.getCount();

cursor.close();

}

return result;

}

相信本文所述实例对于大家的Android程序开发能起到一点参考借鉴作用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值