源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2020-05-11 14:37 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:Android实现获取未接来电和未读短信数量的方法
本文实例展示了Android实现获取未接来电和未读短信数量的方法,在Android程序开发中非常常见,是非常实用的功能,现分享给大家供大家参考。具体如下: [b]一、未读短信 [/b]  首先注册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"); 
  } 
} 

[b]得到未读短信数量:[/b]
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; 
} 
[b]获取未读彩信数量:[/b]
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; 
} 
[b]二、未接来电[/b] 未接来电不能用 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)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部