2010-10-24 68 views
3

我試圖刪除ContentObserver(on「content:// sms /」)onChange()方法中使用contentResolver.delete接收到的SMS,但刪除ContentObserver之後再次調用一次。Android - 爲什麼ContentObserver調用自己?

你可以解釋我的ContentObserver儘管deliverSelfNotifications()返回false自己調用嗎?

我很想在刪除短信之前註冊ContentObserver並註冊後,但不雅。

我的代碼:

private class SmsMmsContentObserver extends ContentObserver { 
    public SmsMmsContentObserver(Handler handler) 
    { 
     super(handler); 
    } 


    @Override public boolean deliverSelfNotifications() { 
     return false; 
     } 


    @Override 
    public void onChange(boolean selfChange) { 
     super.onChange(selfChange); 


     Uri uriSMSURI = Uri.parse("content://sms/"); 
     Cursor cur = getContentResolver().query(uriSMSURI, null, null, 
        null, null); 
     if (cur.moveToNext()) 
     {  
     int threadIdIn = cur.getInt(cur.getColumnIndex("thread_id")); 
      getContentResolver().delete(Uri.parse("content://sms/conversations/" + threadIdIn), null, null); 
     } 


    } 
    } 

的方法來對服務的註冊觀察者。

private void registerSmsMmsObserver() 
    { 
    if (observer == null) 
    { 
     observer = new SmsMmsContentObserver(new Handler()); 
     contentResolver = getContentResolver(); 
     contentResolver.registerContentObserver(uriSmsMms, true, observer); 
    } 
    } 


    private void unregisterSmsMmsObserver() 
    { 
    if (contentResolver != null) 
    contentResolver.unregisterContentObserver(observer); 
    observer = null; 
    } 

回答

1

如果你想刪除的短信到達時在收件箱中,用一個接收器相匹配的短信收到的意圖,獲得比普通收件箱更高的優先級,並取消廣播orderedbroadcast。

此外,刪除確實會在任何觀察此URI的contentObserver上調用onChange。

deliverSelfNotification不會做你似乎在想什麼:

返回true,如果這個觀察者感興趣的通知,通過觀測與登記光標所做的更改。

相關問題