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

画像

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



ご存知のように、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 } }
      
      







カーソルの詳細はこちら



All Articles