2012-02-22 15 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()へのスーパーコールを追加しました。私のregisterContentObserver()コールでnotifyForDescendents()メソッドにtrueを追加し、最後にハンドラパラメータを新しい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); 
関連する問題