Я просто хочу получить все изображения из определенного пути и показать их в Grid RecyclerView Layout, и я тоже это сделал. Вот мой код: -
File[] allFiles;
PhotoModel photomodel;
ArrayList<PhotoModel> photoModelArrayList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public static final File PICTURE_DIRECTORY =
new File(Environment.getExternalStorageDirectory() + File.separator + "Image/AppName/Photoes");
allFiles = PICTURE_DIRECTORY.listFiles();
try {
assert allFiles != null;
Arrays.sort(allFiles, (o1, o2) -> Long.compare(o2.lastModified(), o1.lastModified()));
for (int i = 0; i < allFiles.length; i++) {
File file = allFiles[i];
if (Uri.fromFile(file).toString().endsWith(".png") || Uri.fromFile(file).toString().endsWith(".jpg")) {
photomodel = new PhotoModel("WhatsStatus: " + (i + 1),
Uri.fromFile(file),
allFiles[i].getAbsolutePath(),
file.getName());
photoModelArrayList.add(photomodel);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
Я также добавил все разрешения и унаследованные разрешения в manifest.xml. Надеюсь, этот код хорошо работает на android 16 - android 30.
Но на android R или android 31 этот код не работает, потому что allFiles = PICTURE_DIRECTORY.listFiles () дает нулевое значение. Итак, что мне теперь делать? Я стараюсь изо всех сил, пожалуйста, помогите мне.
if ( allFiles==null) return;if (Uri.fromFile(file).toString().endsWith(".png") || Uri.fromFile(file).toString().endsWith(".jpg")) { Не нужно было так усложнять преобразование в uri. Меняем на if (file.getName().endsWith(".png") || file.getName().endsWith(".jpg")) {`
allFiles[i].getAbsolutePath(), Изменить на file.getAbsolutePath(), `
if ( !PICTURE_DIRECTORY.exists() ) return;отсутствует в вашем коде. Кто создал ту директориюImageв корне внешнего хранилища? Тебе следовало начать с этого.