(最良)カスタムコンテンツプロバイダーにコントロールメッセージを配信する方法
-
28-09-2019 - |
質問
Androidコンテンツプロバイダーには、通常の容疑者{挿入、削除、クエリ、更新}の方法がありますが、コントロールメッセージを送信したい場合は、明らかなメカニズムはありません。ニーズによって管理されたテーブルの1つをリセット、クリア、リロードするとします。これはどうすればいいですか?私はそれらのそれぞれが少しハッキッシュのように見えるいくつかのアプローチを持っています。
1)仕事にアクティビティ(またはサービス/受信機)を作成します。アクティビティは、バルク削除と挿入を行います。これは最もハッキッシュのように思えますが、コンテンツプロバイダーがデータベースヘルパーを起動すると、テーブルが作成され、初期化されます。
コンテンツプロバイダーのデータベースヘルパーと別のアクティビティで初期化コードを複製することは非効率的と思われます。
2)コンテンツプロバイダーAPIをハイジャックします。インサート(または更新/クエリ/削除)メソッドがアクセスできないメソッドを呼び出す場合、ダミーテーブルを作成できます。
3)複数の継承を使用して、コンテンツプロバイダーにサービス(またはアクティビティ)を作成します。これはおそらく私が欲しいものに最も近いですが、これを行う方法がわかりません。特にそれが活動であれば、それは危険だと感じます。
4)(3)に似たサービスコンテンツプロバイダーペアを持っていますが、できればwardがありません。このサービスには、すべての制御種類のことを行うためのAIDLがいます。ルックアップテーブルの読み込み、テーブルのクリア、有効期限が切れたタプルなど、...これが行われた場合、サービスはどのように開始されますか?コンテンツプロバイダーによって?
解決
3)Javaでは不可能です。
4)単にダンプします ContentProvider
サービスが提供するAPIを使用します。
あるかもしれません:
5) ContentProvider
登録a BroadcastReceiver
経由 getContext().registerReceiver()
, 、さまざまな操作のためにブロードキャストを送信します
私はそれを試していませんが、それを想定しています Context
によって返されます getContext()
それをサポートします、それは機能するはずです。