編輯: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程序開發能起到一點參考借鑒作用。
Android登錄實例
登錄應用程序的屏幕,詢問憑據登錄到一些特定的應用。可能需要登錄到Facebook,微博等本章介紹了,如何創建一個登錄界面,以及如何管理安全問題和錯誤嘗試。首先,必須定義兩
Android MediaPlayer(多媒體播放)
Android提供了許多方法來控制播放的音頻/視頻文件和流。其中該方法是通過一類稱為MediaPlayer。Android是提供MediaPlayer類訪問內置的媒體播放
Android提高之XML解析與生成實例詳解
本文實例講述了使用SAX來解析XML。通常來說在Android裡面可以使用SAX和DOM,DOM需要把整個XML文件讀入內存再解析,比較消耗內存,而SAX是基於事
Android JSON解析器
JSON代表JavaScript對象符號。它是一個獨立的數據交換格式,是XML的最佳替代品。本章介紹了如何解析JSON文件,並從中提取所需的信息。Android提供了四個