I am trying to make a music player in Android Studio. I have made a function to fetch songs from storage:
public ArrayList<File> fetchSongs(File file){
file.setReadable(true , false);
File [] songs = file.listFiles();
ArrayList<File> ar = new ArrayList<>();
if( songs != null) {
for (File f : songs) {
if (f.getName().endsWith(".mp3")) {
ar.add(f);
} else {
if (f.isDirectory()) {
ar.addAll(fetchSongs(f));
}
}
}
}
Log.d("fileCheck", "file exists: " + file.exists() +", file cen be read: " + file.canRead());
return ar; }
file.exists() returns true but file.canRead() returns false
I have given permission in Manifest file too:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
I have also requested the permission too using Dexter library. My code in onCreate() :
Dexter.withContext(this)
.withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
ArrayList<File> mySong = fetchSongs(Environment.getExternalStorageDirectory());
String [] items = new String[mySong.size()];
ArrayList<String> songs = new ArrayList<>();
for(int i =0; i<mySong.size(); i++){
items[i] = mySong.get(i).getName();
}
songsList = findViewById(R.id.listView);
songsList.setAdapter(new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1 , items) {
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
TextView textView= (TextView) super.getView(position, convertView, parent);
int white = getContext().getResources().getColor(R.color.white);
textView.setTextColor(white);
return textView;
}
});
}
@Override
public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest, PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
})
.check();