Обработчик смс ContentObserver - PullRequest
2 голосов
/ 18 марта 2012

Я нашел этот код в двух сообщениях здесь:

String url = "content://sms/"; 
Uri uri = Uri.parse(url); 
getContentResolver().registerContentObserver(uri, true, new MyContentObserver(handler));

Но я не знаю, что этот обработчик передал в конструкторе MyContentObserver.

Я хочу зарегистрироватьContentObserver в «content: // sms // sent» будет уведомлен, когда Android отправляет смс, а в документации ContentObserver говорится, что метод OnChange будет вызываться из обработанной, переданной в конструкторе.

1 Ответ

4 голосов
/ 18 марта 2012

A Handler используется вместе с Looper для выполнения очереди задач одна за другой. В случае ContentObserver его метод onChange() может вызываться несколько раз. Чтобы поставить эти вызовы в очередь и выполнить их последовательно, вам необходимо предоставить обработчик.

Если вы хотите, чтобы onChange() выполнялся в главном потоке, просто создайте новый обработчик, такой как: Handler handler = new Handler(); и передайте его.

Но если вы хотите, чтобы onChange() выполнялся в другом потоке, вам сначала нужно создать Looper для этого потока, используя Looper.prepare();

Причина, по которой вам не нужно создавать Looper для основного потока, заключается в том, что он создается автоматически для вас.

Для хорошего объяснения того, как работают Handler & Looper, проверьте эту статью .

...