0
Hack 32  コンテントプロバイダを使う *事情によりテンプレを使えませんでした 担当:鶴岡
#32  コンテントプロバイダを使う <ul><li>この章では 既存のコンテントプロバイダである MediaStore を利用することで コンテントプロバイダがいかに便利 であるか! を理解し、 ついでに利用方法も学びます 。 </li></ul>
#32  コンテントプロバイダを使う <ul><li>MediaStore とは? </li></ul><ul><ul><li>名前からしてお店のようですが DB です </li></ul></ul><ul><ul><li>端末内の画像や音楽な...
#32  コンテントプロバイダを使う <ul><li>MediaStore とは?(続き) </li></ul><ul><ul><li>MediaStore に登録しないと MediaStore の DB を利用しているアプリから 村八分 にさ...
#32  コンテントプロバイダを使う <ul><li>コンテントプロバイダの利用には ContentResolver を利用します。 </li></ul><ul><li>ContentResolver は Activity の getConte...
#32  コンテントプロバイダを使う <ul><li>getContentResolver() が必要なのは何故? </li></ul><ul><ul><li>1つは、 ContentProvider 側からも読み書きを制限 (Permissi...
#32  コンテントプロバイダを使う <ul><li>コンテントプロバイダは DB ベースなので 利用には やはり query が必要です。 </li></ul><ul><li>#32 では画像を表示したいので そのファイルパスと表示名をいただ...
#32  コンテントプロバイダを使う <ul><li>そして、検索結果を Cursor で受け取ります </li></ul>mCursor = cr.query(MediaStore.Images.Media. EXTERNAL_CONTENT...
#32  コンテントプロバイダを使う <ul><li>あとはカーソルを操作して 好きな row のデータをいただきます </li></ul>// Cursor が取得できていればカーソルを先頭へ移動させ画像を表示する if (mCursor !...
#32  コンテントプロバイダを使う <ul><li>カーソルの操作 </li></ul><ul><ul><li>先頭、ラスト </li></ul></ul><ul><ul><li>前、次 </li></ul></ul><ul><ul><li>...
#32  コンテントプロバイダを使う <ul><li>コンテントプロバイダ利用の仕方まとめ </li></ul>1、 ContentResolver を  getContentResolver で呼び出す。 2、呼び出した ContentRes...
参考書籍 <ul><li>『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊) http://www.oreilly.co.jp/books/9784873114569/ </li></ul>
Upcoming SlideShare
Loading in...5
×

Android Hacks - Hack32

1,257

Published on

「Android Hacks ―プロが教えるテクニック & ツール」(株式会社ブリリアントサービス 著)を教材とした勉強会でのまとめ資料です。

http://www.oreilly.co.jp/books/9784873114569/

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,257
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "Android Hacks - Hack32"

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

    Clipping is a handy way to collect important slides you want to go back to later.

×