es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Almacenamiento limitado (Java) – ¿Cómo probar si la aplicación está utilizando almacenamiento heredado?

Estoy migrando mi aplicación a Almacenamiento con ámbito y he incluido la etiqueta preserveLegacyExternalStorage="true" en el manifiesto. Me gustaría saber si hay alguna forma de probar si la aplicación está utilizando el almacenamiento heredado o no. Una parte de la funcionalidad de mi aplicación depende del almacenamiento heredado y simplemente cambiarlo a almacenamiento con ámbito lo romperá, independientemente de la etiqueta en el manifiesto, por lo que necesito alguna forma de detectar el almacenamiento heredado, o al menos cambiar a almacenamiento con ámbito si el almacenamiento heredado falla.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para probar si la aplicación está utilizando el almacenamiento heredado o no, puedes utilizar el método Environment.getExternalStorageDirectory(). Este método devuelve la ruta del directorio de almacenamiento externo principal. Si la ruta devuelta es la misma que la obtenida antes de migrar al almacenamiento con ámbito (Scoped Storage), entonces la aplicación está utilizando el almacenamiento heredado, de lo contrario está utilizando el almacenamiento con ámbito.

    Si detectas que la aplicación está utilizando el almacenamiento heredado, puedes utilizar Environment.getExternalStoragePublicDirectory() para obtener el directorio al que necesitas acceder y seguir utilizándolo. Si falla, puedes cambiar al almacenamiento con ámbito utilizando la API MediaStore o el StorageAccessFramework.

    Aquí tienes un ejemplo de fragmento de código:

    if (Environment.getExternalStorageDirectory().getPath().equals("/storage/emulated/0")) {
        // la aplicación está utilizando el almacenamiento heredado, seguir utilizándolo
        File legacyDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        // hacer algo con legacyDir...
    } else {
        // la aplicación está utilizando el almacenamiento con ámbito
        Uri downloadsUri = MediaStore.Downloads.getContentUri(MediaStore.VOLUME_EXTERNAL_PRIMARY);
        // hacer algo con downloadsUri...
    }
    

Comments are closed.