Известен файл uri, например
`file:///mnt/sdcard/Download/AppSearch_2213333_60.apk`
Я хочу проверить, может ли этот файл открыться или нет в фоновом режиме, как это сделать?
Известен файл uri, например
`file:///mnt/sdcard/Download/AppSearch_2213333_60.apk`
Я хочу проверить, может ли этот файл открыться или нет в фоновом режиме, как это сделать?
Проверьте, существует ли файл пути таким образом:
File file = new File("/mnt/sdcard/Download/AppSearch_2213333_60.apk" );
if (file.exists()) {
//Do something
}
Имейте в виду, чтобы удалить что-то вроде "file://" и т.д., в противном случае используйте:
File file = new File(URI.create("file:///mnt/sdcard/Download/AppSearch_2213333_60.apk").getPath());
if (file.exists()) {
//Do something
}
Также вы должны установить правильные разрешения для своего приложения в AndroidManifest.xml для доступа к sdcard:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Начните с извлечения имени файла с помощью URI
:
final String path = URI.create("file:///mnt/sdcard/Download/AppSearch_2213333_60.apk")
.getPath(); // returns the path segment of this URI, ie the file path
final File file = new File(path).getCanonicalFile();
// check if file.exists(); try and check if .canRead(), etc
Целесообразно использовать URI
здесь, так как он позаботится об декодировании всех возможных пробелов/символов в URI, но легален в именах файлов.
Приведенные выше ответы не будут работать для всех версий Android (см. " Получение имени файла и пути из URI из mediastore" и " Получение реального пути из URI", новой инфраструктуры доступа к хранилищу Android KitKat), но есть простой способ с использованием DocumentsContract:
DocumentsContract.isDocumentUri(context,myUri)
Я написал функцию, которая проверяет, существует ли файл по заданному пути. Путь может быть абсолютным путем или путем Ури.
fun localFileExist(localPathOrUri: String?, context:Context): Boolean {
if (localPathOrUri.isNullOrEmpty()) {
return false
}
var exists = File(localPathOrUri).exists()
if (exists) {
return exists
}
val cR = context.getContentResolver()
val uri = Uri.parse(localPathOrUri)
try {
val inputStream = cR.openInputStream(uri)
if (inputStream != null) {
inputStream.close()
return true
}
} catch (e: java.lang.Exception) {
//file not exists
}
return exists
}