クラスContentResolver
は、コンテンツ機関からContentProvider
クラスへのマッピングを維持します。このマッピングのデータは、インストールされているさまざまなアプリケーションのAndroidManifest.xmlファイルの<provider>
要素から取得されます。 ContentResolverは、このマッピングを使用して、指定されたURIに使用するプロバイダクラスが正しいかどうかを識別します。ContentResolverはDNSのようなものだと考えてください。どのサーバー(プロバイダ)がクエリに答えるのが正しいかがわかります。
contentAuthorities(content:type uriの「ドメイン名」部分)は一意である必要があるため、一致するContentProviderは1つだけです。彼らは階層的ではありません。それらを正確に一致しなければならない一意の文字列として扱います。彼らが階層的に見える理由は、Javaパッケージ名が一意であることが保証される方法と同様に、一意性を保証する簡単な方法を可能にするためです。 tag documentationのための「セクション:
Androidシステムが プロバイダ コンテンツの権限部分でコンテンツを識別:「説明パー
。URIたとえば、次のURIが渡されることを想定 にContentResolver.query():
content://com.example.project.healthcareprovider/nurses/rn
コンテンツ:スキームがを識別するデータはコンテンツ プロバイダに属し、権限 (com.example.project.healthcareprovider) は特定のプロバイダを識別します。 したがって、権限は ユニークである必要があります。通常、この例のように は ContentProviderサブクラスの完全修飾名です。 URIのパス 一部は、特定のデータ サブセットを識別するためにコンテンツ プロバイダによって使用されてもよいが、これらのパスを使用すると、contentAuthorityとプロバイダを作るときに何が起こるかについてはマニフェスト
で宣言さ ありませんそれは別のものと同じです...まあ、ものが壊れます。
は/ PackageManagerをWARN:(パッケージcom.xxx中)プロバイダ名com.xxx.Provider がすでにCOMで使用されているため、インストールできません具体的には、それは言って、第二に行く方のパッケージをインストールすることを拒否します.zzz
だから....しないでください。
ContentProviderが実行されているかどうかを確認する方法はありません。これは、必要に応じてContentResolverによって自動的に開始および停止されます。特定のcontentAuthorityのリクエストを作成すると、関連付けられているプロバイダがまだ実行されていない場合は起動されます。それはContentResolverによって自動的に停止されます。しばらくしてアイドル状態になり、しばらくの間は必要ないように見えます。
http://developer.android.com/guide/topics/providers/content-providers.html#urisumは、権限がURIから連絡先プロバイダを識別するためにどのように使用されるかについて説明します。私の質問の2番目の部分はまだ関連しています、名前の重複/拡張がある場合はどうなりますか? – phreed