Your SlideShare is downloading. ×
0
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Android Hacks - Hack32
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Android Hacks - Hack32

1,246

Published on

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

「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,246
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
5
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 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/

×