1

ContentProvider私は、最初にそれを使用するアプリケーションと同じプロジェクト ファイルで開発したカスタム クラスを持っています。ただし、このアプリケーションは の多くのユーザーの 1 人に過ぎないことを意図しているためContentProvider、別のプロジェクトに分割したいと考えています。コードは Android PDK で開発されていますが、将来のクライアントは SDK (カスタム SDK、または SDK プラグインなど) で開発される可能性があります。

私が直面している問題は、ContentProviderCONTENT_URI、列名、およびクエリから返された値を解釈するために使用されるいくつかの定数など、クラスの定数に関するものです。もちろん、これらは別のプロジェクトからアクセスすることはできません。この時点で3つのオプションがあるようです:

1) 問題を無視し、ユーザー アプリケーション コードに値を直接入力します。ただし、これによりアクセスがContentProvider醜くなります。コードを保守可能に保つために、一部の列を整数ではなく文字列でエンコードするために、いくつかの列を変更する必要があります。

2) 定数を別のクラスに入れ、ContentProvider. 私はコードを複製するのが好きではありません。各ターゲット アプリでこのコードの複製を保持すると、いくつかの項目を維持するのが少し煩わしくなります。

3) 私が PDK で開発しているという事実を悪用し、 で説明されているようにプラットフォーム ライブラリを公開しますvendor/sample/frameworks/PlatformLibrary。ただし、プラットフォーム ライブラリにはマニフェスト ファイルがありません。つまり、私の理解が正しければ、ContentProvider. これは、 の「通常の」プロジェクトが 1 つ必要ContactProviderであり、定数値を持つクラスを公開するためだけに別のプロジェクトが必要であることを意味します。これはとても間違っているように感じます。

複数のサブテーブルを持つ ContentProvider のクラス構造 での答えは、オプション (1) を暗示しているように思われます。

ただし、これを行うための別のきちんとした整頓された方法を見逃したのではないでしょうか? 私は PDK で開発していることを念頭に置いて、ContentProviderストック Google プロバイダーと同じように使用できるようにしたいと考えています。

4

1 に答える 1

3

ContentProviderおそらく、列名やコンテンツURIなどに静的定数を使用する「コントラクト」を定義するクラス/インターフェイスが少なくとも1つはすでに存在します。

これを独自のAndroidSDKライブラリプロジェクトに入れると(Androidクラスをビルド/クラスパスに配置するためだけに)、実際のSDK / PDKアプリケーションからこのライブラリを使用し、他のユーザーが使用できるようにJARContentProviderとして配布することもできます。myapp-api.jar

このようにして、両方の長所を活用できます。古いコードはなく(ContentProvider依存しているため)、他の人はURIと列名に適切な定数を使用できます。

コントラクトクラスの例については、ContactsContractを参照してください。

于 2011-08-25T08:31:22.180 に答える