前提・実現したいこと
初心者です。
実現したいのは、Downloadsフォルダ内を再帰的に検索する方法です。
Downloadsフォルダ内に、複数のフォルダが存在しており、それぞれのフォルダには、複数の音源ファイル(.mp3)などが入っております。
その全ての音源ファイルを再帰的に検索し取得し、順番に再生するようなものを作成したいと思っております。
再生する際には、どのフォルダのどの音源かなどを表示したいと考えております。
AndroidDevelopersのサイトを見ながらやっていたのですが、
DownloadsフォルダまでのPathを
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
で取得したのはいいのですが、Downloads以下のディレクトリ一覧を取得しようと
FileList = new File(Downloads_path).listFiles();
を使っていたのですが、そもそもリストが取得できていませんでした。
Androidにはパスなど複数の取得方法が存在しており、いまいちどのような場合にどれを使うのかがわかっておりません。
どなたかご教授いただけないでしょうか。
よろしくお願いいたします。
試したこと
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath();
にて、Downloadフォルダまでのpathを取得
FileList = new File(Downloads_path).listFiles();
にて、Downloadフォルダ以下のディレクトリを取得しようとしたが、できなかった。
Logにて、取得したpathを表示したところ
/storage/emulated/0/Download このようになっておりました。
また、adbで取得したpathにアクセスしたところディレクトリがある事は確認しております。
補足情報(FW/ツールのバージョンなど)
最終的に解決した方法は以下のようにパーミッションを要求するように実装したところ解決しました。
他の方の参考になればと思い、以下に書き残しときます。
①に実装するにあたって以下のAndroid Developerのサイトを参考にしました。
②に欲しいPermissionの種類がいろいろ書いてあります。
①https://developer.android.com/training/permissions/requesting?hl=ja
②https://developer.android.com/reference/android/Manifest.permission?hl=ja#READ_CONTACTS
java
1public void CheckPermission() { 2 if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) 3 != PackageManager.PERMISSION_GRANTED) { 4 //ここでパーミッションがあるかチェックしてる? 5 if (ActivityCompat.shouldShowRequestPermissionRationale(this, permission.READ_EXTERNAL_STORAGE)) { 6 //ここはよくわからないけど、必要っぽい? 7 }else{ 8 ActivityCompat.requestPermissions(this,newString[]{permission.READ_EXTERNAL_STORAGE},GetResultPermission); 9 //このelse文でユーザ側にアクセス可能かどうかをポップアップで聞いてくる 10 } 11 } 12 }
manifestファイルにも必要なpermissionを追記しないといけないと思います。
自分の場合は、外部ストレージ(ExternalStorage)へのREADのアクセスが必要でしたので、以下を追記しました。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
回答1件
あなたの回答
tips
プレビュー