Android實現獲取未接來電和未讀簡訊數量的方法

NO IMAGE

本文例項展示了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程式設計實現定時發簡訊功能示例