четвер, 7 травня 2020 р.

FileChooser (FilePicker) in Android Program

Якщо необхідно реалізувати вибір файлів у вашій Android програмі, то додати до своєї програми так званий FileChooser або ж його ще називають FilePicker можна декількома способами. Можна використати стандартні засоби API Android, а можна скористатися сторонніми бібліотеками, яких зараз є доволі багато.

Передусім можна використати стандартний Intent.ACTION_GET_CONTENT. Для цього достатньо додати в обробник події натиснення кнопки наступні рядки:
Intent myFileIntent=new Intent(Intent.ACTION_GET_CONTENT);
myFileIntent.setType("*/*");
startActivityForResult(myFileIntent,10);
Також необхідно замістити (@Override) метод OnActivityResult і додати в ньому:
if (requestCode == 10 && resultCode == RESULT_OK) {
    String path=data.getData().getPath();
    textView.setText(path);
}
В результаті після натиснення кнопки з’явиться стандартна активність, яка дозволяє вибрати звідки вибирати файли і навіть, які засоби встановлені у системі використати. Наявні елементи можуть відрізнятися в залежності від конфігурації системи Android.

На моєму мобільному це виглядає так:
ACTION_GET_CONTENT, FileChooser Android
Інший варіант реалізувати вибір файлів є підключення сторонньої бібліотеки до Андроїда. Я опробував дві бібліотеки.

Material FilePicker ('com.nbsp:library:1.8') Детальніше тут.

Як її застосовувати також наведено на цьому відео:

Дана бібліотека дозволяє створити простий FileChooser в Android. Проте особисто мені сподобалась інша бібліотека, яка має більше можливостей щодо налаштувань, більше функцій та кращий зовнішній вигляд.

Це Android-FileBrowser-FilePicker ('com.adityak:browsemyfiles:1.9'). Детальніше тут.

Якщо необхідний FileChooser/FilePicker, то додаємо в gradle:
implementation 'com.adityak:browsemyfiles:1.9'
В обробник події кнопки для реалізації множинного вибору:
Intent i2 = new Intent(getApplicationContext(), FileChooser.class);
i2.putExtra(Constants.SELECTION_MODE, Constants.SELECTION_MODES.MULTIPLE_SELECTION.ordinal());
startActivityForResult(i2, PICK_FILE_REQUEST);
А у заміщеному (@Override) методі OnActivityResult додаємо:
if (requestCode == PICK_FILE_REQUEST && data!=null) {
      if (resultCode == RESULT_OK) {
          ArrayList selectedFiles  = data.getParcelableArrayListExtra(Constants.SELECTED_ITEMS);
      }
}
Результат тестування усіх трьох способі наведено на наступному відео:

Початковий код розміщено тут: https://github.com/volodimirg/TestFileChooser. Дивіться код MainActivity. У Manifest було додано лише дозвіл доступу до зовнішнього сховища даних.

Якщо у вас є зауваження, питання, відгуки, то буду вдячний, якщо ви залишите їх у коментарях під публікацією. Підписуйтесь на фейсбук сторінку.

Дивіться також:

Немає коментарів:

Дописати коментар