Библиотека, которую я использую, требует, чтобы я передал ей путь к файлу.
В настоящее время я использую Uri для создания нового файла (в AsyncTask
), как показано ниже:
@Override
protected String doInBackground(Uri... params) {
File file = null;
int size = -1;
try {
try {
if (returnCursor != null && returnCursor.moveToFirst()){
int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
size = (int) returnCursor.getLong(sizeIndex);
}
}
finally {
if (returnCursor != null)
returnCursor.close();
}
if (extension == null){
pathPlusName = folder + "/" + filename;
file = new File(folder + "/" + filename);
}else {
pathPlusName = folder + "/" + filename + "." + extension;
file = new File(folder + "/" + filename + "." + extension);
}
BufferedInputStream bis = new BufferedInputStream(is);
FileOutputStream fos = new FileOutputStream(file);
byte[] data = new byte[1024];
long total = 0;
int count;
while ((count = bis.read(data)) != -1) {
if (!isCancelled()) {
total += count;
if (size != -1) {
publishProgress((int) ((total * 100) / size));
}
fos.write(data, 0, count);
}
}
fos.flush();
fos.close();
} catch (IOException e) {
errorReason = e.getMessage();
}
return file.getAbsolutePath();
}
Как вы можете себе представить, это может занять некоторое время в зависимости от размера файла.
Вопрос
Есть ли способ получить доступ к файлу без необходимостичтобы создать / скопировать его?
* Я прочитал, что могу использовать ContentResolver
и такие методы, как openInputStream()
и openOutputStream()
. Но это только даст мне поток и не решит проблему с необходимостью написать новый файл?
Дополнительная информация:
Я получаю Uri, передаваяпосле намерения:
intent.setType("video/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
Затем в onActivityResult
я получаю Uri по телефону data.getData()
.
Пожалуйста, не предоставляйте мне такие решения, как this один. Я не хочу получать файл Uri из содержимого Uri, поскольку он ненадежен и некорректен.