狠狠撸

狠狠撸Share a Scribd company logo
Hack 32  コンテントプロバイダを使う *事情によりテンプレを使えませんでした 担当:鶴岡
#32  コンテントプロバイダを使う この章では 既存のコンテントプロバイダである MediaStore を利用することで コンテントプロバイダがいかに便利 であるか! を理解し、 ついでに利用方法も学びます 。
#32  コンテントプロバイダを使う MediaStore とは? 名前からしてお店のようですが DB です 端末内の画像や音楽などの メディアファイルのメタデータ(位置や名前)のDBです。 特に面白そうなのが音楽のプレイリスト 音楽再生ソフトをまたいでプレイリストを使いまわせるのも これのおかげです 残念ながら iPod にあるような 音楽の☆☆☆☆☆はサポートしてません。 Sdcard を差しなおすと ぐるぐるしてる のは MediaScan ( DB 作成)をしているからです。
#32  コンテントプロバイダを使う MediaStore とは?(続き) MediaStore に登録しないと MediaStore の DB を利用しているアプリから 村八分 にされる 何らかのアプリケーションを作ったとして、 その中で新しい画像を生成したようなときには、 MediaStore へ登録したほうがいいです それがお作法なのでしょう Android2.3 のソースの中を見ても Bluetooth で OPP 通信したり Garaly3D でクロップしたときに MediaScan(scanFile) しているのが(コード上で)見えます。
#32  コンテントプロバイダを使う コンテントプロバイダの利用には ContentResolver を利用します。 ContentResolver は Activity の getContentResolver で取得できます。 ContentResolver cr = getContentResolver()
#32  コンテントプロバイダを使う getContentResolver() が必要なのは何故? 1つは、 ContentProvider 側からも読み書きを制限 (Permission) することができる。その仕組みのために、コンテンツプロバイダに アクセスする側の コンテキスト が必要となる コンテキスト についてはここでは(という逃げ方で言うけど) 権限、と考えればよいと思います Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc.  アプリケーション固有のリソースや、アクティビティの起動やブロードキャストを投げるなどのアプリケーションレベルでの動作を許す (Allows)  アプリケーション環境の情報のインターフェース。(私の摂訳)
#32  コンテントプロバイダを使う コンテントプロバイダは DB ベースなので 利用には やはり query が必要です。 #32 では画像を表示したいので そのファイルパスと表示名をいただくことにしました String[] columns = { MediaStore.Images.Media. DATA ,  //  画像のファイルパス MediaStore.Images.Media. DISPLAY_NAME   //  画像の表示名 };   NOTE: MediaStore のテーブルは MediaStore.MediaColumns  インターフェースで決まっています。 http://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html
#32  コンテントプロバイダを使う そして、検索結果を Cursor で受け取ります mCursor = cr.query(MediaStore.Images.Media. EXTERNAL_CONTENT_URI , columns, null , null , MediaStore.Images.Media. DEFAULT_SORT_ORDER ); String[] columns = { MediaStore.Images.Media. DATA ,  //  画像のファイルパス MediaStore.Images.Media. DISPLAY_NAME   //  画像の表示名 };  
#32  コンテントプロバイダを使う あとはカーソルを操作して 好きな row のデータをいただきます // Cursor が取得できていればカーソルを先頭へ移動させ画像を表示する if (mCursor !=  null ) { mCursor.moveToFirst(); showImage(); } //  現在のカーソル位置から画像の表示名を取得する columnIndex = mCursor.getColumnIndex(MediaStore.Images.Media. DISPLAY_NAME ); columnName = mCursor.getString(columnIndex);
#32  コンテントプロバイダを使う カーソルの操作 先頭、ラスト 前、次 オフセット、絶対位置 move(int offset) moveToFirst() moveToLast() moveToNext() moveToPrevious() moveToPosition(int absolutePosition)
#32  コンテントプロバイダを使う コンテントプロバイダ利用の仕方まとめ 1、 ContentResolver を  getContentResolver で呼び出す。 2、呼び出した ContentResolver の query メソッドで   アクセスしたいコンテントプロバイダのURIと   取り出したいカラム、並び順を指定。       select XXX from YYY  の部分を決めてしまいます。   すると条件を満たすレコードが手に入る。 3、  ContentResolver で query を投げて    検索結果を query で受けます 4、カーソルを操作しながら検索結果にアクセス
参考書籍 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) http://www.oreilly.co.jp/books/9784873114569/

More Related Content

Android Hacks - Hack32

  • 1. Hack 32  コンテントプロバイダを使う *事情によりテンプレを使えませんでした 担当:鶴岡
  • 2. #32  コンテントプロバイダを使う この章では 既存のコンテントプロバイダである MediaStore を利用することで コンテントプロバイダがいかに便利 であるか! を理解し、 ついでに利用方法も学びます 。
  • 3. #32  コンテントプロバイダを使う MediaStore とは? 名前からしてお店のようですが DB です 端末内の画像や音楽などの メディアファイルのメタデータ(位置や名前)のDBです。 特に面白そうなのが音楽のプレイリスト 音楽再生ソフトをまたいでプレイリストを使いまわせるのも これのおかげです 残念ながら iPod にあるような 音楽の☆☆☆☆☆はサポートしてません。 Sdcard を差しなおすと ぐるぐるしてる のは MediaScan ( DB 作成)をしているからです。
  • 4. #32  コンテントプロバイダを使う MediaStore とは?(続き) MediaStore に登録しないと MediaStore の DB を利用しているアプリから 村八分 にされる 何らかのアプリケーションを作ったとして、 その中で新しい画像を生成したようなときには、 MediaStore へ登録したほうがいいです それがお作法なのでしょう Android2.3 のソースの中を見ても Bluetooth で OPP 通信したり Garaly3D でクロップしたときに MediaScan(scanFile) しているのが(コード上で)見えます。
  • 5. #32  コンテントプロバイダを使う コンテントプロバイダの利用には ContentResolver を利用します。 ContentResolver は Activity の getContentResolver で取得できます。 ContentResolver cr = getContentResolver()
  • 6. #32  コンテントプロバイダを使う getContentResolver() が必要なのは何故? 1つは、 ContentProvider 側からも読み書きを制限 (Permission) することができる。その仕組みのために、コンテンツプロバイダに アクセスする側の コンテキスト が必要となる コンテキスト についてはここでは(という逃げ方で言うけど) 権限、と考えればよいと思います Interface to global information about an application environment. This is an abstract class whose implementation is provided by the Android system. It allows access to application-specific resources and classes, as well as up-calls for application-level operations such as launching activities, broadcasting and receiving intents, etc. アプリケーション固有のリソースや、アクティビティの起動やブロードキャストを投げるなどのアプリケーションレベルでの動作を許す (Allows) アプリケーション環境の情報のインターフェース。(私の摂訳)
  • 7. #32  コンテントプロバイダを使う コンテントプロバイダは DB ベースなので 利用には やはり query が必要です。 #32 では画像を表示したいので そのファイルパスと表示名をいただくことにしました String[] columns = { MediaStore.Images.Media. DATA , // 画像のファイルパス MediaStore.Images.Media. DISPLAY_NAME // 画像の表示名 };   NOTE: MediaStore のテーブルは MediaStore.MediaColumns  インターフェースで決まっています。 http://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html
  • 8. #32  コンテントプロバイダを使う そして、検索結果を Cursor で受け取ります mCursor = cr.query(MediaStore.Images.Media. EXTERNAL_CONTENT_URI , columns, null , null , MediaStore.Images.Media. DEFAULT_SORT_ORDER ); String[] columns = { MediaStore.Images.Media. DATA , // 画像のファイルパス MediaStore.Images.Media. DISPLAY_NAME // 画像の表示名 };  
  • 9. #32  コンテントプロバイダを使う あとはカーソルを操作して 好きな row のデータをいただきます // Cursor が取得できていればカーソルを先頭へ移動させ画像を表示する if (mCursor != null ) { mCursor.moveToFirst(); showImage(); } // 現在のカーソル位置から画像の表示名を取得する columnIndex = mCursor.getColumnIndex(MediaStore.Images.Media. DISPLAY_NAME ); columnName = mCursor.getString(columnIndex);
  • 10. #32  コンテントプロバイダを使う カーソルの操作 先頭、ラスト 前、次 オフセット、絶対位置 move(int offset) moveToFirst() moveToLast() moveToNext() moveToPrevious() moveToPosition(int absolutePosition)
  • 11. #32  コンテントプロバイダを使う コンテントプロバイダ利用の仕方まとめ 1、 ContentResolver を  getContentResolver で呼び出す。 2、呼び出した ContentResolver の query メソッドで   アクセスしたいコンテントプロバイダのURIと   取り出したいカラム、並び順を指定。       select XXX from YYY  の部分を決めてしまいます。   すると条件を満たすレコードが手に入る。 3、 ContentResolver で query を投げて    検索結果を query で受けます 4、カーソルを操作しながら検索結果にアクセス
  • 12. 参考書籍 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) http://www.oreilly.co.jp/books/9784873114569/