我正在嘗試製作一個應用程序來統計手機中傳出的SMS消息的數量。目前我有以下代碼:Android:檢測短信傳出,錯誤計數
private void listenForSMS(){
Log.v("SMSTEST", "STARTED LISTENING FOR SMS OUTGOING");
Handler handle = new Handler(){};
SMSObserver myObserver = new SMSObserver(handle);
ContentResolver contentResolver = getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"),true, myObserver);
}
private class SMSObserver extends ContentObserver{
int count = 0;
String lastMessage = null;
public SMSObserver(Handler handler) {
super(handler);
}
public void onChange(boolean selfChange) {
super.onChange(selfChange);
Log.v("SMSTEST", "HIT ON CHANGE");
Uri uriSMSURI = Uri.parse("content://sms");
Cursor cur = getContentResolver().query(uriSMSURI, null, null,
null, null);
cur.moveToNext();
String protocol = cur.getString(cur.getColumnIndex("protocol"));
if(protocol == null){
count++;
Log.v("SMSTEST", "SMS SENT: count: " + count);
String content = cur.getString(cur.getColumnIndex("body"));
}else{
Log.v("SMSTEST", "SMS RECIEVED");
}
}
}
當我發送一個網頁短信,onChange
被稱爲3倍。當我發送兩頁短信時,onChange
被調用4次。 3頁的信息,被稱爲5次;等等。
注意:我嘗試了Uri.parse("content://sms")
的其他變體,例如「content:// sms/sent」,除了「content:// sms」之外沒有任何東西被調用onChange
。
如何唯一地區分發送的SMS消息並獲得發送的SMS消息的數量的準確計數?
我發現了一個其實很簡單的解決方案。只需建立一個while循環並查詢WHERE date> = someTime。 –