Android實現(xiàn)獲取未接來電和未讀短信數量的方法
本文實例展示了Android實現(xiàn)獲取未接來電和未讀短信數量的方法,在Android程序開發(fā)中非常常見,是非常實用的功能,現(xiàn)分享給大家供大家參考。具體如下:
一、未讀短信
首先注冊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監(jiān)聽,不過當有新的未接來電時,系統(tǒng)會發(fā)送一個廣播com.android.phone.NotificationMgr.MissedCall_intent(鎖屏上顯示的未接來電數量就是通知監(jiān)聽這個廣播實現(xiàn)的)
具體功能代碼如下:
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);
廣播只是當有新的未接來電時才會發(fā)送,但是如果有舊的未接來電沒有讀取時,上面的廣播就得不到數據了,那就必須得從數據庫中查找了。
功能代碼如下:
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程序開發(fā)能起到一點參考借鑒作用。
- android短信攔截的實現(xiàn)代碼
- Android短信接收監(jiān)聽、自動回復短信操作例子
- Android發(fā)送短信功能代碼
- 詳解Android 藍牙通信方式總結
- Android實現(xiàn)發(fā)送短信功能實例詳解
- android中可以通過兩種方式調用接口發(fā)送短信
- Android獲取和讀取短信驗證碼的實現(xiàn)方法
- Android實現(xiàn)短信驗證碼自動填寫功能
- Android實現(xiàn)自動提取短信驗證碼功能
- android讀取短信示例分享
- Android編程實現(xiàn)攔截短信并屏蔽系統(tǒng)Notification的方法
- Android編程實現(xiàn)定時發(fā)短信功能示例
相關文章
讓Android中RadioGroup不顯示在輸入法上面的辦法
在Android開發(fā)中,發(fā)現(xiàn)一個問題,打開輸入法導致下面的radioGroup的位置發(fā)生了變化,被頂到了輸入法的上面,那么該如何解決呢?下面來看看。2016-08-08ActivityManagerService廣播注冊與發(fā)送示例解析
這篇文章主要為大家介紹了ActivityManagerService廣播注冊與發(fā)送示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-03-03