我寫了一個應用程序來偵聽從默認消息應用程序發送的短信。Android:ContentObserver觸發次數更多
當我使用下面的代碼時,該應用程序不會觸發發送短信。
SMSSentObserver smsSentObserver = new SMSSentObserver(null, this);
ContentResolver contentResolver = this.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms/sent"), true, smsSentObserver);
然後通過使用下面的代碼,ContentObserver被觸發。
SMSSentObserver smsSentObserver = new SMSSentObserver(null, this);
ContentResolver contentResolver = this.getContentResolver();
contentResolver.registerContentObserver(Uri.parse("content://sms"), true, smsSentObserver);
我能夠監聽發送短信,但SMSSentObserver(實現ContentObserver)onCreate()方法被調用超過一次。 然後我向代碼添加條件以找出發送的短信事件。但條件通過了兩個事件。
public class SMSSentObserver extends ContentObserver {
private final Context _context;
public SMSSentObserver(Handler handler, Context context) {
super(null);
_context = context;
}
@Override
public void onChange(boolean selfChange) {
saveSentSMS();
super.onChange(selfChange);
}
private void saveSentSMS() {
Uri uriSMSURI = Uri.parse("content://sms/sent");
Cursor cur = this._context.getContentResolver().query(uriSMSURI, null, null, null, null);
if(null == cur) {
return;
}
if(cur.moveToFirst()) {
String strProtocol = cur.getString(cur.getColumnIndex("protocol"));
if(null != strProtocol) { //for sent messages protocol will be null.
return;
}
int type = cur.getInt(cur.getColumnIndex("type"));
if(type == 2) {
String strSMSBody = cur.getString(cur.getColumnIndex("body"));
String strPhoneNo = cur.getString(cur.getColumnIndex("address"));
long smsDateTime = cur.getLong(cur.getColumnIndex("date"));
String serviceCenter = cur.getString(cur.getColumnIndex("service_center"));
String strStatus = cur.getString(cur.getColumnIndex("status"));
String strPerson = cur.getString(cur.getColumnIndex("person"));
Log.e("Info", "SMS saved");
}
}
}
}
「短信保存」在catlog中顯示兩次而不是一次。有人可以告訴我,有沒有其他方法來找出發送的短信?
任何幫助被讚賞。