web-dev-qa-db-ja.com

androidコンテンツプロバイダーの権限

コンテンツプロバイダー当局の理由は何ですか?

マニフェストで宣言する必要がある以外に、どのように/なぜそれらを使用したいのですか?

私はこの質問について宿題をしようとしましたが、このトピックに関するまともでまとまりのある議論を見つけることができません。これが私が見つけた最高のものです(私が所有するAndroid開発)に関する4冊の本に加えて):

  1. https://stackoverflow.com/search?q=content+provider+authority
  2. コンテンツプロバイダー、権限、およびURIのマッチング
  3. 利用可能なコンテンツプロバイダーのリストを取得します
  4. http://developer.Android.com/guide/topics/manifest/provider-element.html
  5. http://developer.Android.com/guide/topics/providers/content-provider-creating.html
14
JDOaktown

権限は、特定のコンテンツプロバイダーと対話するために使用されます。つまり、権限は一意である必要があります。そのため、 グッドプラクティス ドメイン名(逆)とプロバイダーを含むパッケージの名前として宣言するので、他の開発者がコンテンツプロバイダーで宣言するアプリを作成する可能性は低くなります。同じ権限。

マニフェストで宣言して、アプリや他のアプリ(許可した場合)がコンテンツプロバイダーを介してURIの形式でデータを操作できるようにします。

content://authority-name/data-in-the-provider

Httpurlのドメインと同様に機能します。

http://domain-name/data-in-the-site
20
ILovemyPoncho

私はまた、説明を探しており、ILovemyPonchoによって提供された回答に追加するために、この特定の answer をヒットし、引用します:

そしてAndroid:当局は正確に何を求めていますか?

プロバイダーのシステム全体の一意の識別子。またはより良い世界的にユニーク。すべてのプロバイダーはシステムに登録されており、一意である必要があります。そうでない場合、同じ名前を使用する2番目のアプリをインストールできません。

最後にその文字列を使用して、次のようなURIを介してプロバイダーと通信します。

Uri uri = Uri.parse( "content://" + "your.authoritiy.string")

このように言いましょう。アプリのContentProviderへのリクエストを容易にする見えざる手があります。

例えば:

    Uri uri = mContext.getContentResolver().insert(NotifireContentProvider2.NOTE_URI, values);

基本的に、ここでAndroid OSに言っているのは、XMLで定義した権限を含むURIを指定してデータを挿入することです。OSはこの特定のコンテンツプロバイダーを検索し、にリクエストを送信します。 ContentProviderのinsertメソッドが呼び出され、それに応じて処理するにはURIを一致させる必要があります。

また、あなたがコンテンツプロバイダーである場合は、他の人も同様の権限を持っているほど単純です。私が言及したこれらの2つの問題に遭遇したことはありませんが、それは快適ではないと思います。

権限は、OSが要求元のアプリにデータを提供するプロバイダーを理解し、それがデータを提供するプロバイダーであることを確認するためにあります。

2
Neon Warge