2012-02-22 2 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()에 super 호출을 추가했는데, 내 registerContentObserver() 호출에서 notifyForDescendents() 메소드에 true를 추가하고 마지막으로 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); 
관련 문제