[Android] MediaStore スマホの画像や音楽ファイルを検索する

スマホ内の画像はギャラリー等にあり、前の記事では Intent.ACTION_OPEN_DOCUMENT を使ってピッカーからユーザーが画像を選んで取り込む事ができました。
 
またダイレクトに画像を検索して画像のpathを取得してみます。
 
cotentresolver 1 170x300 - [Android] MediaStore スマホの画像や音楽ファイルを検索する

Android Studio 3.0.1
Android 8.1.0



ContentResolver

 
Android アプリケーションの一部でデータの中央リポジトリへのアクセスを管理しているのがコンテンツ プロバイダです。コンテンツ プロバイダの基本
 
コンテンツ プロバイダのデータにアクセスするためにContentResolver.query() を呼び出してデータ情報を取得します。
 

 

 

Permissions

 
ContentResolverを使ってスマホ内のMediaStre内を検索しますのでPermissionが必要になります。

AndroidManifest.xmlに追加

READ_EXTERNAL_STORAGE は、Android 6.0 Runtime Permissionに該当するため、アプリ起動中に許可を得るように設定します。
許可しない場合でも例外で落ちないように実装しないといけません。
 
permission 1 300x254 - [Android] MediaStore スマホの画像や音楽ファイルを検索する

  • APIが23以上か否か
    • False: そのまま処理実行
  • 既に許可しているか否か、checkSelfPermission(…)
    • 既に許可していない場合や、初回起動のケースは次に行く
    • 許可しているケースは処理に移る
  • Permissionが何に使われるか説明して許可を訪ねる
    • 拒否された場合はこの機能については動作しないが他の処理をする
    • 許可されて処理の実行
 

サンプルコード

 
ManActivity.java は許可の処理を行い、実際のpathの検索は ReadContent.java で行っています。

MainActivity.java

 
ここからが本番
ReadContent.java

 
レイアウト
actiity_main.xml

 
package nameは適宜変更してください。
AndroidManifest.xml

 
EXTERNAL_CONTENT_URI

INTERNAL_CONTENT_URI
がありますが
ExternalがSDカードだけを指しているわけではありません
アプリの外で端末内の内部メモリ領域とSDカードを指しています
もちろんSDカードがないスマホは内部メモリのみです。

スマホメーカーの実装に依存しますがギャラリーの画像などは
EXTERNAL_CONTENT_URI
で見つかります
 
cotentresolver 1 170x300 - [Android] MediaStore スマホの画像や音楽ファイルを検索する
 
音楽ファイルを探すときは、 MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
に変更すると検索できます。
 

 
実際にemulatorがどうなっているかはDevice File Explorerを使うと確認できます。

 
Reference:
コンテンツ プロバイダの基本

誤字脱字、意味不明で分からにゃイ、
などのご意見はこちらから mailフォーム

ブックマークしておくと便利です このエントリーをはてなブックマークに追加


 


ページのトップへ戻る




シェアする

  • このエントリーをはてなブックマークに追加

フォローする