广

android开发

  • IOS开发
  • android开发
  • PHP编程
  • JavaScript
  • ASP.NET
  • ASP编程
  • JSP编程
  • Java编程
  • 易语言
  • Ruby编程
  • Perl编程
  • AJAX
  • 正则表达式
  • C语言
  • 编程开发

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

    2018-04-16 10:56:40 次阅读 稿源:互联网
    广告

    本文实例展示了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程序开发能起到一点参考借鉴作用。

    一起学吧部分文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与一起学吧进行文章共享合作。

    广告
    广告
    广告