[Android] アンドロイド端末内のファイル検索

Android7

スマホ内のファイルを探し出したいときがあると思います。MediaStoreの画像などはコンテンツプロバイダーで検索できますが、特定のファイル検索はどうするのかと調べてみました。
 

Android Studio 2.2.2
Android 7.1.1

 


ファイルパス検索

 
この方法はフォルダーにあるファイルを一個づつ確認するとてもベタなやり方ですが、ある意味どのようにでも使えます。
また、読出しが可能な範囲に限定され、更にストレージ内を読むのでREAD_EXTERNAL_STORAGEが必要となり、Android 6.0 Runtime Permissionに該当します。Permission checkが必要となります。

検索のやり方は

  1. java.io.File クラスのメソッド list() を使って
    ディレクトリに含まれるファイル、ディレクトリのリストアップをする
  2. subFile.isDirectory()
    リストされた物がディレクトリかファイルか確認
  3. subFile.getName().endsWith(fileType)
    ファイルの拡張子がpngかどうか

以下はお決まりのREAD_EXTERNAL_STORAGEに関係するpermission checkとなります。
permissionが許可されたならば次のActivityに飛んで検索処理をします。
MainActivity.java

 
ここからが本番です
SearchPath.java

 
レイアウトです、スクロールできるようにしておきました。
activity_main.xml

 
READ_EXTERNAL_STORAGEとAcivityを追加しておきます
AndroidManifest.xml

 
検索する項目を自由に変更して、目的に合わせてファイル検索できますが、
ルート直下だと Permission でブロックされるディレクトリが多いので注意

File file = Environment.getExternalStorageDirectory();
として外部ストレージ内の検索をしています
といってもAndroid4以降はSDカードを指していません、
スマホ内部のメモリ領域の外部ストレージを指しているケースが多いでしょう。

Google developer: Using the External Storage 
In this case, the SD card is not part of the external storage and your app cannot access it (the extra storage is intended only for user-provided media that the system scans).

だそうです。