欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-05-16 12:30:01
本文实例展示了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程序开发能起到一点参考借鉴作用。