sを自動的に更新する慣用的でimhoの正しい方法は、sが作成されたとき、およびそれらが要求されたものに渡される前にCursor
呼び出すことです。Cursor#setNotificationUri
次に、そのUriの名前空間ContentResolver#notifyChange
内の何かが変更されたときに呼び出します。Cursor
たとえば、単純なメールアプリケーションを作成していて、新着メールが到着したときに更新するだけでなく、メールのさまざまなビューを提供したいとします。基本的なURIをいくつか定義しておきます。
content://org.example/all_mail
content://org.example/labels
content://org.example/messages
ここで、すべてのメールを表示し、新着メールが到着したときに更新されるカーソルを取得したいとします。
Cursor c;
//code to get data
c.setNotificationUri(getContentResolver(), Uri.parse("content://org.example/all_mail");
これで新着メールが届いたので、次のように通知します。
//Do stuff to store in database
getContentResolver().notifyChange(Uri.parse("content://org.example/all_mail", null);
Cursor
また、この新しいメッセージが出会ったラベルに選択したすべてのを通知する必要があります
for(String label : message.getLabels() {
getContentResolver().notifyChange(Uri.parse("content://org.example/lables/" + label, null);
}
また、カーソルがその1つの特定のメッセージを表示している可能性があるので、それらにも通知します。
getContentResolver().notifyChange(Uri.parse("content://org.example/messages/" + message.getMessageId(), null);
getContentResolver()
呼び出しは、データがアクセスされる場所で発生します。だから、それがService
またはContentProvider
にある場合は、あなたsetNotificationUri
とnotifyChange
。データにアクセスする場所からそれを行うべきではありません。たとえば、Activity
。
AlarmProvider
ContentProvider
このメソッドを使用してsを更新する単純なですCursor
。