Не получается правильно получить файл по URI Android
Необходимо получить файл, который потом отправится на сервер.
Кидаю через Intent
val intent = Intent(Intent.ACTION_GET_CONTENT)
intent.type = "file/*"
startActivityForResult(intent, PICKFILE_RESULT_CODE)
Получаю в onActivityResult во Fragment
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
Log.d("Код", resultCode.toString())
Log.d("Код r", requestCode.toString())
Log.d("Код d", data.toString())
when(requestCode) {
PICKFILE_RESULT_CODE -> {
data?.let {
val file = File(data.data.toString())
val format = getFileFormat(file.name)
if(!isSupportFormat(format)){
Snackbar.make(getView()!!, "Неподдерживаемый формат", Snackbar.LENGTH_SHORT)
.show()
return
}
Log.d("File format", format)
Log.d("File", file.name)
Log.d("File size", file.length().toString())
}
}
Log
2020-03-31 19:41:33.535 8480-8480/com.app.peshkariki D/Код: -1
2020-03-31 19:41:33.535 8480-8480/com.app.peshkariki D/Код r: 100
2020-03-31 19:41:33.535 8480-8480/com.app.peshkariki D/Код d: Intent { dat=content://com.mi.android.globalFileexplorer.myprovider/external_files/app-release_gruzo.apk flg=0x1 }
2020-03-31 19:41:33.538 8480-8480/com.app.peshkariki D/File format: apk
2020-03-31 19:41:33.538 8480-8480/com.app.peshkariki D/File: app-release_gruzo.apk
2020-03-31 19:41:33.538 8480-8480/com.app.peshkariki D/File size: 0
при отправке file через Okhttp, Okhttp падает с ошибкой не возможности нахождения файла
2020-03-31 21:03:17.455 20644-22309/com.app.peshkariki W/System.err: java.io.FileNotFoundException: content:/com.mi.android.globalFileexplorer.myprovider/external_files/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%A1%D0%BE%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BE%20%D0%BD%D0%B5%D1%80%D0%B0%D0%B7%D0%B3%D0%BB%D0%B0%D1%88%D0%B5%D0%BD%D0%B8%D0%B8.doc (No such file or directory)
Ответы (1 шт):
Автор решения: Andrew
→ Ссылка
Вот есть способ для получения размера файла:
private String getRealSizeFromUri(Context context, Uri uri) {
Cursor cursor = null;
try {
String[] proj = { MediaStore.Audio.Media.SIZE };
cursor = context.getContentResolver().query(uri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);
cursor.moveToFirst();
return cursor.getString(column_index);
} finally {
if (cursor != null) {
cursor.close();
}
}
}