狠狠撸

狠狠撸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

More from Masanori Ohkawara (9)

Android Hacks - Hack40
Android Hacks - Hack40Android Hacks - Hack40
Android Hacks - Hack40
Masanori Ohkawara
?
Android Hacks - Hack31
Android Hacks - Hack31Android Hacks - Hack31
Android Hacks - Hack31
Masanori Ohkawara
?
Android Hacks - Hack30
Android Hacks - Hack30Android Hacks - Hack30
Android Hacks - Hack30
Masanori Ohkawara
?
Android Hacks - Hack27 ~ Hack29
Android Hacks - Hack27 ~ Hack29Android Hacks - Hack27 ~ Hack29
Android Hacks - Hack27 ~ Hack29
Masanori Ohkawara
?
Android Hacks - Hack26
Android Hacks - Hack26Android Hacks - Hack26
Android Hacks - Hack26
Masanori Ohkawara
?
Android Hacks - Hack21
Android Hacks - Hack21Android Hacks - Hack21
Android Hacks - Hack21
Masanori Ohkawara
?
Android Hacks - Hack12
Android Hacks - Hack12Android Hacks - Hack12
Android Hacks - Hack12
Masanori Ohkawara
?
Android Hacks - Hack11
Android Hacks - Hack11Android Hacks - Hack11
Android Hacks - Hack11
Masanori Ohkawara
?
Android Hacks - Hack8
Android Hacks - Hack8Android Hacks - Hack8
Android Hacks - Hack8
Masanori Ohkawara
?

Recently uploaded (6)

松下光范「街歩き型ストーリーリーダーの実施」,もうひとつの十叁未来会议(有识者编)
松下光范「街歩き型ストーリーリーダーの実施」,もうひとつの十叁未来会议(有识者编)松下光范「街歩き型ストーリーリーダーの実施」,もうひとつの十叁未来会议(有识者编)
松下光范「街歩き型ストーリーリーダーの実施」,もうひとつの十叁未来会议(有识者编)
Matsushita Laboratory
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト提出资料「作品説明动画」制作のポイントをご绍介
鲍-22プログラミング?コンテスト运営事务局
?
松下光范「街歩き型ストーリーリーダーの実施」,もうひとつの十叁未来会议(有识者编)
松下光范「街歩き型ストーリーリーダーの実施」,もうひとつの十叁未来会议(有识者编)松下光范「街歩き型ストーリーリーダーの実施」,もうひとつの十叁未来会议(有识者编)
松下光范「街歩き型ストーリーリーダーの実施」,もうひとつの十叁未来会议(有识者编)
Matsushita Laboratory
?
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
2019飞冲东京大学大学院茂木研究室冲学生研究员杉田翔栄冲搁罢贰最终発表会スライト?.辫诲蹿
翔栄 杉田
?
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
量子リザバソフトウェア冲时系列データ(农业?核融合?需要予测)効果検証冲导入による成果
info819904
?
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージカスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
カスタム厂尝惭「贬补尘蝉迟别谤」冲軽量でセキュアな専用言语モデル冲础滨エージェント冲チャットボット冲マッチングアプリ构筑のコアパッケージ
info819904
?
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
自由に移动する复数の?々に异なる映像を提?するテ?ィスフ?レイシステムについての基础検讨
sugiuralab
?

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/