2

このコードは、次の 2 つの投稿で見つけました。

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

しかし、MyContentObserver のコンストラクターで渡されたこのハンドラーが何であるかはわかりません。

「content://sms//sent」に ContentObserver を登録して、Android が SMS を送信したときに通知されるようにしたいと考えています。

4

1 に答える 1

4

Handlerと組み合わせて使用​​されLooper、タスクのキューを 1 つずつ実行します。ContentObserver の場合、そのonChange()メソッドは複数回呼び出される可能性があります。これらの呼び出しをキューに入れ、順番に実行するには、ハンドラーを提供する必要があります。

メインスレッドで実行したい場合はonChange()、次のような新しい Handler を作成してHandler handler = new Handler();渡すだけです。

onChange()ただし、別のスレッドで実行したい場合は、最初Looperにそのスレッド用にを作成する必要があります。Looper.prepare();

メイン スレッド用に を作成する必要がない理由Looperは、それが自動的に作成されるからです。

Handler と Looper がどのように機能するかについてのわかりやすい説明については、この記事を参照してください

于 2012-03-18T19:20:13.157 に答える