Android实现获取未接来电和未读短信数量的方法
短信预约 -IT技能 免费直播动态提醒
本文实例展示了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程序开发能起到一点参考借鉴作用。
您可能感兴趣的文章:android短信拦截的实现代码Android短信接收监听、自动回复短信操作例子Android发送短信功能代码android短信监听工具(示例代码)Android实现发送短信功能实例详解android中可以通过两种方式调用接口发送短信Android获取和读取短信验证码的实现方法Android实现短信验证码自动填写功能Android实现自动提取短信验证码功能android读取短信示例分享Android编程实现拦截短信并屏蔽系统Notification的方法Android编程实现定时发短信功能示例
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341