Я разрабатываю приложение Android, которое выдает намерение селектора файлов, чтобы пользователь мог выбрать один или несколько файлов.
Я получаю один или несколько файлов Uri и могу получить доступ к файлам через InputStream , полученный по телефону getBaseContext().getContentResolver().openInputStream(pUri)
. Используя этот InputStream, я могу читать файлы.
Я также хотел бы получить "Дата модификации файла". Обычно я получаю файл из Uri, затем использую
Files.getFileAttributeView(path, BasicFileAttributeView.class).readAttributes();
для получения даты модификации.
Этот метод работает, если файл находится в локальном хранилище приложения пользователя. Однако если файл находится во внешнем хранилище, например на SD-карте, вызов getAttribute ... вызывает исключение для файла, не найденного.
Есть ли способ, возможно, путем запроса преобразователя содержимого, получить дата изменения файла, если он находится во внешнем хранилище?
Просто к вашему сведению, что у меня действительно есть разрешение READ_EXTERNAL_STORAGE.
Вот как я выдаю намерение:
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("image/jpeg");
intent.putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true);
startActivityForResult(Intent.createChooser(intent, "Choose Photos"), RQS_GET_PHOTOS);
Вот как я обрабатываю результаты:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
if (requestCode == RQS_GET_PHOTOS) {
//
// Get and process photo files
//
ClipData clipData = data.getClipData();
Uri pUri = data.getData();
if (clipData == null && pUri == null) { // Don't know if this can actually happen...
Toast.makeText(this, "No jpeg files selected", Toast.LENGTH_LONG).show();
} else if (clipData != null) {
// User selected multiple files
pData.clear();
for (int i = 0; i < clipData.getItemCount(); i++) {
ClipData.Item item = clipData.getItemAt(i);
Uri uri = item.getUri();
Photo photo = new Photo(getFileName(uri), uri, i);
pData.add(photo);
}
} else { // User only selected one file
Photo photo = new Photo(getFileName(pUri), pUri, 1);
pData.add(photo);
}
И здесь я пытаюсь получить дату изменения:
DocumentFile df = DocumentFile.fromSingleUri(this, iterPhoto.getUri());
Boolean x = df.exists();
Long fdate = df.lastModified();
Но, хотя "df" содержит данные, "x" является false и fdate равно 0;