How can I access file on shared storage after reinstall on Android 11?

Viewed 123

I can't access the text file that my app created on the shared storage after reinstalling my application on Android 11 devices. On a fresh install, I can easily access the file that I created on my first run. After uninstalling and reinstalling the app, I can't read/access the file that I created. Here is my code for creating the text file:

ContentValues cv = new ContentValues();
cv.put(MediaStore.MediaColumns.DISPLAY_NAME, "sample.txt");
cv.put(MediaStore.MediaColumns.MIME_TYPE, "text/plain");
cv.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DOCUMENTS + "/my_directory/");
Uri uri = context
        .getContentResolver()
        .insert(MediaStore.Files.getContentUri("external"), cv);
            OutputStream outputStream = context.getContentResolver().openOutputStream(uri);
            outputStream.write(Security.encrypt(UUID.randomUUID().toString()).getBytes(StandardCharsets.UTF_8));
            outputStream.flush();
            outputStream.close();

And here is my code for reading/accessing the text file:

String uuid = "";
Uri contentUri = MediaStore.Files.getContentUri("external");
String selection = MediaStore.MediaColumns.RELATIVE_PATH + "=?";
String[] selectionArgs = new String[]{Environment.DIRECTORY_DOCUMENTS + "/my_directory/"};
Cursor cursor = context.getContentResolver().query(contentUri, null, selection, selectionArgs, null);
Uri uri = null;

while (cursor.moveToNext()) {
    String fileName = cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.DISPLAY_NAME));
    if (fileName.equals("sample.txt")) {
                long id = cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns._ID));
                uri = ContentUris.withAppendedId(contentUri, id);
                break;
            }
    }
    cursor.close();
    if (uri == null) {
        return "";
    }

    InputStream inputStream;
    try {
            inputStream = context.getContentResolver().openInputStream(uri);
            int size = inputStream.available();
            byte[] bytes = new byte[size];
            inputStream.read(bytes);
            inputStream.close();
            uuid = new String(bytes, StandardCharsets.UTF_8);
     } catch (IOException e) {
            Timber.e(e);
     }
     return uuid;
}
0 Answers
Related