File.exists возвращает true, но при записи в этот файл возвращается исключение «файл не найден» в Android 30 в AndroidAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 File.exists возвращает true, но при записи в этот файл возвращается исключение «файл не найден» в Android 30 в Android

Сообщение Anonymous »

В моем случае у меня есть файл, созданный во время моей предыдущей установки, но после переустановки я пытаюсь записать файл, теперь он выдает исключение «Файл не найден». При отладке file.exists возвращает true, но при записи в этот файл он возвращает исключение «файл не существует» в Android 30.
Метод, вызываемый при нажатии кнопки: String S_LOG_DIR_PATH = Environment.getExternalStorageDirectory().toString()
+ File.separator + Environment.DIRECTORY_DOWNLOADS +
File.separator + "mShaktiLog" ;
String S_LogFile_FullFilePath = S_LOG_DIR_PATH +File.separator +"test.txt";
if ( Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
File file = new File(S_LogFile_FullFilePath);
if ( isPermissionGranted() ) {
if ( !LogManager.checkFileExists() ) {
String initialDirectoryPath = S_LOG_DIR_PATH;
Uri initialUri = Uri.parse(initialDirectoryPath);
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("*/*");
intent.putExtra(DocumentsContract.EXTRA_INITIAL_URI, initialUri);
getActivity().startActivityForResult(intent, 25);
} else {
LogManager.createActiveLogFile(getActivity(), file);
}
} else {
LogManager.debug(TAG + ":: permission error");
}
}

onActivityResult
Uri uri = data.getData();
ContentResolver contentResolver = ApplicationClass.getShaktiApplicationContext().getContentResolver();
contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION);
contentResolver.takePersistableUriPermission(uri, Intent.FLAG_GRANT_WRITE_URI_PERMISSION);

isURIPermissionGranted(uri);
LogManager.logStr(uri, "Reinitiated");

Проверка FileExistencey с помощью ContentResolver
@RequiresApi(api = Build.VERSION_CODES.R)
public static boolean checkFileExists(){
String folderName = "mShaktiLog";

boolean isFileExists = false;

ContentResolver resolver = ApplicationClass.getShaktiApplicationContext().getContentResolver();
String[] projection = {
MediaStore.Downloads.DISPLAY_NAME,
MediaStore.Downloads.RELATIVE_PATH
};
String selection = MediaStore.Downloads.DISPLAY_NAME + "=? AND " +
MediaStore.Downloads.RELATIVE_PATH + "=?";
Uri downloadsUri = MediaStore.Downloads.EXTERNAL_CONTENT_URI;
String[] selectionArgs = {S_LOG_FILE_NAME, Environment.DIRECTORY_DOWNLOADS + File.separator + folderName};
// String[] selectionArgs = {S_LOG_FILE_NAME, Environment.DIRECTORY_DOWNLOADS};
Cursor cursor = resolver.query(downloadsUri, projection, selection, selectionArgs, null);
if (cursor != null && cursor.getCount() > 0) {
isFileExists = true;
}
if (cursor != null) {
cursor.close();
}
return isFileExists;
}


Подробнее здесь: https://stackoverflow.com/questions/784 ... t-found-ex
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»