Вместо устаревшей java Файловой структуры я нашел еще одну устаревшую функцию startActivityForResult. Есть не устаревшая, но все еще бета-версия registerForActiviResult. Но я не могу найти, какой Uri перейти на запуск this. Из-за этого я вынужден использовать startActivityForResult, чтобы передать Uri в Direcroty:
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE).apply {
flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
}
startActivityForResult(intent,10)
Затем из Uri, полученного из устаревшего onActivityResult, создайте другой Uri, потому что первый не подходит для проверки свободного места на диске.
val docUriTree = DocumentsContract.buildDocumentUriUsingTree(u,DocumentsContract.getTreeDocumentId(u))
val fd = app.contentResolver.openFileDescriptor(docUriTree,"r")
val st = Os.fstatvfs(fd?.fileDescriptor)
Log.d(TAG, "sUr: Free ${st.f_bsize * st.f_bavail / 1024 / 1024} MByes f_bsize: ${st.f_bsize} Bytes f_bavail: ${st.f_bavail}")
Затем список файлов ...
val df = DocumentFile.fromTreeUri(app.applicationContext, u)
val dfl = df?.listFiles()
dfl?.forEach {
Log.d("MY_TAG",
"\n-------------------\n$it\nname: ${it.name}\nparentFile: ${it.parentFile}\nuri: ${it.uri}\ntype: ${it.type}\nlength: ${it.length()}\nlastModified: ${it.lastModified()}\n-------------------------\n"
)
// Do something with it like:
filelist.add(
ImageFile(
fUri = it.uri,
Name = it.name,
bitmap = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
DocumentsContract.getDocumentThumbnail(
app.contentResolver, it.uri,
Point(190, 108), null
)
else
null
)
)
}
Я не могу понять, как использовать бета-версию registerForActivityResult вместо устаревшего startActivityForResult.
ps
Наконец-то нашел, что передать для запуска. Это DocumentsContract.EXTRA_INITIAL_URI.
registerForActivityResult(ActivityResultContracts.OpenDocumentTree()) {
if (it != null) {
viewModel.sUr(it)
}
}.launch(Uri.parse(DocumentsContract.EXTRA_INITIAL_URI))
Какие еще параметры можно передать для запуска? Что такое DocumentsContract.EXTRA_INITIAL_URI?