2012-02-22 111 views
1

我正在嘗試使用以下內容觀察器觀察sms消息。不幸的是,它只是出現一些事件。起初我認爲這是一個生命週期問題,所以我將方法放在停止,啓動,恢復等方法中,以確保在我的活動處於最前沿時確保始終有觀察者在觀察。任何人有任何想法,爲什麼它只接收第一條新消息?捕獲第一個之後,在我重新安裝應用程序之前它不會啓動。內容觀察者只調用一次,然後再也不再

private void registerContentObservers() { 
    ContentResolver cr = getContentResolver(); 

    mSmsObserver = new ContentObserver(mHandler) { 

     @Override 
     public void onChange(boolean selfChange) { 
      Log.v(TAG, "onChange method"); 
     } 

     @Override 
     public boolean deliverSelfNotifications() { 
      return true; 
     } 
    }; 
    // cursor.registerContentObserver(mSmsObserver); 
    cr.registerContentObserver(Uri.parse("content://sms/inbox"), false, mSmsObserver); 

} 

private void unregisterContentObservers() { 
    ContentResolver cr = getContentResolver(); 
    if (mSmsObserver != null) { 
     // just paranoia 
     cr.unregisterContentObserver(mSmsObserver); 
     mSmsObserver = null; 
    } 
} 

@Override 
protected void onDestroy() { 
    Log.v(TAG, "onDestroy()"); 
    unregisterContentObservers(); 
    super.onDestroy(); 
} 

@Override 
protected void onStart() { 
    Log.v(TAG, "onStart()"); 
    registerContentObservers(); 
    super.onStart(); 
} 

@Override 
protected void onStop() { 
    Log.v(TAG, "onStop()"); 
    unregisterContentObservers(); 
    super.onStop(); 
} 

@Override 
protected void onResume() { 
    Log.v(TAG, "onResume()"); 
    registerContentObservers(); 
    super.onResume(); 
} 

@Override 
protected void onPause() { 
    Log.v(TAG, "onPause()"); 
    super.onPause(); 
} 

回答

0

我想通了。我添加了對onChange()的超級調用,在我爲registerForDescendents()方法添加了true的registerContentObserver()調用中,最後將Handler參數更改爲新的Handler()調用。

 mSmsObserver = new ContentObserver(new Handler()) { 

     @Override 
     public void onChange(boolean selfChange) { 
      Log.v(TAG, "onChange method"); 
      super.onChange(selfChange); 
     } 

     @Override 
     public boolean deliverSelfNotifications() { 
      return true; 
     } 
    }; 
    cr.registerContentObserver(Uri.parse("content://sms"), true, mSmsObserver); 
相關問題