特定の SQLite データベースが変更されるたびに通知する必要がある Android アプリを作成しています (新しい行が追加、削除、または更新されます)。
これらの通知を聞くプログラム的な方法はありますか?
各テーブルに DB トリガーを書き込むことが唯一の方法ですか?
特定の SQLite データベースが変更されるたびに通知する必要がある Android アプリを作成しています (新しい行が追加、削除、または更新されます)。
これらの通知を聞くプログラム的な方法はありますか?
各テーブルに DB トリガーを書き込むことが唯一の方法ですか?
SQLite はデータ変更通知コールバックを提供します。Android がそれらを直接公開しているとは思いませんが、たとえば、いくつかの変更通知を提供するCursorAdapterがあります。
thinksteep が尋ねたように、DB は自分のアプリケーションの範囲外で変更されると思いますか?
DataSetObserverなどのオブザーバー クラスを登録できます。
次に、何かを変更するたびに、変更をcursor.registerDataSetObserver(..)
監視するために呼び出すことができます。
十分に文書化されていませんが、いくつかの例があると確信しています
getContentResolver().registerContentObserverも使用できますが、残念ながら、どのような変更が行われたかはわかりません。削除、挿入、または更新の可能性があります。
DB とやり取りする ContentProvider を制御する場合は、Intent を起動するか、getContentResolver().notifyChangeを使用して、テーブルとアクションの両方を識別する特別な Uri 通知を送信できます。通知に使用できる Uri の例は次のとおりです。content://my-authority/change/table-name/insert
しかし、その場合でも、どの行が変更の影響を受けたか正確にはわかりません。
変更ログ テーブルに書き込むトリガーは、発生元に関係なくすべての変更を確実に通知し、発生した正確な ID とアクションを知ることができるようです。残念ながら、挿入/更新/削除が遅くなることを意味し、変更を処理および削除するには、おそらく何らかのサービスが必要であることを意味します。
これらがより良い解決策であるかどうか聞いてみたいです!