コンテンツプロバイダー コンタクトインタラクション

画像
親愛なるハブロフチアン!

ご存知のように、Androidは潜在的に進化し、競争力のあるオペレーティングシステムです。 より多くの開発者が毎日このシステムの下に置かれています。 私は初心者のAndroid開発者ですが、そのためのEclipseとADTのインストール方法については説明しません。

このトピックでは、Androidオペレーティングシステムのコンテンツプロバイダーについて説明し、そのうちの1つと連携する小さな例を紹介します。



コンテンツプロバイダーとは

コンテンツプロバイダーは、サービス内のデータを集約するように設計されたエンティティです。 コンテンツプロバイダーを使用することで、データソースはプレゼンテーションステートフル転送(REST)プロバイダーに似ています
画像



RESTとは

REST(Representational State Transfer)は、Webサービスの構築に一般的に使用されるWorld Wide Webなどの分散システム用のソフトウェアアーキテクチャのスタイルです。 RESTという用語は、HTTPプロトコルの作成者の1人であるRoy Fieldingによって2000年に導入されました。 RESTをサポートするシステムは、RESTfulシステムと呼ばれます。

一般に、RESTは、追加の内部層を使用しない非常にシンプルな情報管理インターフェイスです。 各情報は、URLなどのグローバル識別子によって一意に識別されます。 各URLには、厳密に定義された形式があります。

そして今、同じことはより明白です:

追加の内部層が存在しないということは、データ自体と同じ形式でのデータ転送を意味します。 つまり SOAPやXML-RPCのようにデータをXMLでラップしません。FlashのようにAMFを使用しません。 データそのものを与えるだけです。

情報の各ユニットはURLによって一意に決定されます。つまり、URLは基本的にデータユニットのプライマリキーです。 つまり たとえば、本棚の3番目の本は/ book / 3のようになり、この本の35ページ目は/ book / 3 / page / 35のようになります。 ここから、厳密に指定された形式を取得します。 また、データがアドレス/ book / 3 / page / 35にある形式はまったく関係ありません。HTML、jpegファイル形式のスキャンされたコピー、またはMicrosoft Word文書のいずれかです。

サービス情報の管理方法-これは完全にデータ転送プロトコルに基づいています。 最も一般的なプロトコルは、もちろんHTTPです。 したがって、HTTPの場合、データに対するアクションは、GET(取得)、PUT(追加、置換)、POST(追加、変更、削除)、DELETE(削除)のメソッドを使用して設定されます。 したがって、CRUD(作成-読み取り-更新-削除)アクションは、4つのメソッドすべてで実行でき、GETおよびPOSTでのみ実行できます。

以下は例でどのように見えるかです:

GET / book /-すべての本のリストを取得
GET / book / 3 /-ブック番号3を取得
PUT / book /-ブックを追加します(リクエスト本文のデータ)
POST / book / 3-書籍の変更(リクエスト本文のデータ)
DELETE / book / 3-ブックを削除します


Androidの標準コンテンツプロバイダーの種類

   -ブラウザ
   -CallLog
   -連絡先
     -人々
     -電話
     -写真
     -グループ
   -MediaStore
     -オーディオ
         -アルバム
         -アーティスト
         -ジャンル
         -プレイリスト
     -画像
         -サムネイル
     -ビデオ
   -設定

階層の上位レベルでは、SQLiteデータベースは下位テーブルにあります。 したがって、ブラウザ、CallLog、連絡先、MediaStore、設定は、プロバイダーの形式でカプセル化された個別のSQLiteデータベースです。


コンテンツプロバイダーのアーキテクチャ

各コンテンツプロバイダーは、特別な行を使用してWebサイトとしてデバイスに登録されます(ドメイン名のように見え、権限と呼ばれます)。 デバイス内のこの一意の文字セットシーケンスは、URIのセットの基礎です。

ソースの登録は、AndroidManifest.xmlファイルで実行されます。 以下は、Androidでコンテンツプロバイダーを登録する方法の2つの例です。

<provider android:name = "SomeProvider" android:authorities = "com.YourApplication.SomeProvider" />
<provider android:name = "NotePadProvider" android:authorities = "com.google.provider.NotePad" />

コンテンツプロバイダーは、コンテンツを取得するための同様のRESTリンクにも遭遇します。

content://com.google.provider.NotePad/notes/-すべての投稿を取得
content://com.google.provider.NotePad/notes/#-IDで1つのレコードを取得

以下は、コンテンツプロバイダーのURIです。

コンテンツ://メディア/内部/画像/
コンテンツ://メディア/外部/画像/
コンテンツ://連絡先/人/
コンテンツ://連絡先/人/ 23

ここで、プロバイダー(content:// media /)および(content://連絡先)の構造は不完全です。つまり、これらのコンテンツプロバイダーはサードパーティではなく、Androidシステムによって制御されます。

特定のURIをより詳細に検討します。

コンテンツ://com.google.provider.NotePad/notes/23

コンテンツの後:URIには、対応するレジストリでコンテンツプロバイダーを見つけるために使用される統一されたソース識別子が含まれます。

このURIでは、com.google.provider.NotePad部分がソースです。
/ notes / 23は、個々のコンテンツプロバイダーに固有のパスセクションです


URIを使用して連絡先データを読み取る

Androidのセキュリティシステムを覚えておくことが重要なので、AndroidManifest.xmlファイルに追加します。

<uses-permission android:name="android.permission.READ_CONTACTS" />

アクセス権の詳細についてはこちらをご覧ください

次のURIを考慮してください

People.CONTENT_URI

同等のテキスト文字列URIは次のようになります。

コンテンツ://連絡先/人/

このようなURIを使用する場合、文字列を取得するためのコードは次のようになります。

 /*     */ Cursor managedCursor = managedQuery(People.CONTENT_URI, new String[] { People._ID, People.NAME, People.NUMBER }, //    null, //   () null, //   People.NAME + " ASC"); //   //   : startManagingCursor(managedCursor); // ,      if (managedCursor.getCount() > 0) { while (managedCursor.moveToNext()) { //     Log.i("DATA", managedCursor.getString(0) + " :: " //   _ID + managedCursor.getString(1) + " " //   NAME + managedCursor.getString(2)); //   NUMBER } } 


カーソルの詳細はこちら

Source: https://habr.com/ru/post/J132720/


All Articles