java.io.FileNotFoundException: (Permiso denegado) al escribir un objeto usando ObjectOutputStream

He estado tratando de solucionar esto durante varias horas y estoy extremadamente frustrado, así que les pido ayuda.

Estoy tratando de guardar y recuperar un objeto de usuario que he creado. Quiero hacerlo para poder guardar y recuperar este objeto de usuario de cualquier intento en mi aplicación, por lo que decidí ir con un flujo de entrada y salida de archivos. He incluido mi código para ambos a continuación.

Aquí está mi método de datos de salida:

public static void serializeDataOut(User ish) {
    try {
        String path = Environment.getExternalStorageDirectory().getAbsolutePath();
        File newFile = new File(path + "myFile.ser");
        FileOutputStream fos = new FileOutputStream(newFile);
        ObjectOutputStream oos = new ObjectOutputStream(fos);
        oos.writeObject(ish);
        oos.flush();
        oos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

Y aquí está mi método de datos de entrada:

public static User serializeDataIn(){
    try{
        String path = Environment.getExternalStorageDirectory().getAbsolutePath();
        FileInputStream fin = new FileInputStream(path + "myFile.ser");
        ObjectInputStream ois = new ObjectInputStream(fin);
        User iUser = (User) ois.readObject();
        ois.close();
        return iUser;
    } catch (IOException | ClassNotFoundException e) {
        e.printStackTrace();
        return null;
    }
}

Nota: ambos métodos residen dentro de mi clase de Usuario, que también implementa Serializable.

Todo el error con la ruta del archivo se ve así:java.io.FileNotFoundException: /storage/emulated/0myFile.ser (Permission denied) y apareció en esta línea:FileOutputStream fos = new FileOutputStream(newFile); cuando lo llamé desde otra intención así:User.serializeDataOut(addingUser); en el que agregarUsuario era un objeto de usuario válido.

Lo primero que hice después de ver (Permiso denegado) en el registro de excepciones, fue ir a mi manifiesto y verificar si estaba permitiendo que mi aplicación leyera y escribiera en el almacenamiento, lo que de hecho hice. He incluido mis permisos a continuación:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Luego leí que algunas personas estaban teniendo este error si tenían la ruta incorrecta, más específicamente sin incluir la ruta absoluta, que luego edité mi código para incluir elEnvironment.getExternalStorageDirectory().getAbsolutePath(); parte, que estoy bastante seguro de que estoy usando correctamente.

También me aseguré de que, dado que estoy probando esto en un emulador, había habilitado una tarjeta SD y el emulador tenía una carpeta SD. Lo comprobé y, de hecho, tenía una carpeta de tarjeta SD, y también probé esta aplicación en un S8 y obtuve el mismo error.

¿Qué estoy haciendo exactamente mal aquí? Todo lo que quiero hacer es guardar un objeto de Usuario y recuperarlo en otro lugar, y estoy perfectamente bien con un archivo anterior que se sobrescribe y solo tengo un Usuario guardado a la vez.

También algo que probablemente esté relacionado: acabo de notar: aproximadamente cada 3-5 segundos en mi monitor de Android, un error sigue apareciendo sin parar incluso después de que elimino mi aplicación. El error se ve así:onFatalError, processing error from engine(4) com.google.android.apps.gsa.shared.speech.a.g: Error reading from input stream Aunque solo puedo suponer que este no es el origen del problema, solo quería agregarlo, en caso de que pudiera ayudar. Gracias

Respuestas a la pregunta(3)

Su respuesta a la pregunta