TransWikia.com

No accede a los archivos de la memoria en Android 10

Stack Overflow en español Asked by Leonardo Henao on February 19, 2021

Tengo una aplicación para liberar memoria de los dispositivos yendo directamente a carpetas donde se guardan archivos de cache y en especial imágenes o archivos enviados que quedan guardados en el dispositivo.

En las versiones de android inferiores a 10 funciona de maravilla, pero al actualizar mi dispositivo a android 10 noto que lee la memoria pero no lista los archivos, he buscado y no encuentro que se deba solicitar los permisos de forma distinta para la API 29 (Android 10).

Comparto el codigo que utilizo para verificar y solicitar permisos

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {

        val PERMISSSION_READ_MEMORY = ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
        val PERMISSION_WRITE_MEMORY = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)

        if (PERMISSSION_READ_MEMORY == PackageManager.PERMISSION_GRANTED && PERMISSION_WRITE_MEMORY == PackageManager.PERMISSION_GRANTED) {

            escaneoMemoriaInteligente().execute()

        } else {

            val dialog = mCreateDialog(this, R.layout.permisos, false)
            dialog.show()

            dialog.bt_entendido_permisos.setOnClickListener {
                dialog.dismiss()
                ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE), 1)
            }
        }
    } else escaneoMemoriaInteligente().execute()

El escaneoMemoriaInteligente().execute() es un Asyntask, aunque esta deprecated no creo que sea la razón, ya que sin enviar al AsynTask y listar los archivos con cualquier ruta en otra parte del codigo, tampoco los muestra.

  • No me da error en el Log, simplemente no lista los archivos.

Por ejemplo:

val list = Utils.memoriaDispositivo.list()
// val list = Utils.memoriaDispositivo.listFiles()
MLog.l("lista de archivos -> $list")

Al hacer esto me mostraría por consola la lista de los archivos, pero este es el resultado

Error capture

Gracias por la colaboración.

Coloco la etiqueta java ya que también manejo ese lenguaje por si la solución la encuentro en el

One Answer

Primeramente solo es necesario requerir el permiso :

  val PERMISSION_WRITE_MEMORY = ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)

ya que es inherente el permiso READ_EXTERNAL_STORAGE.

Ahora con respecto a el problema en el cual no puedes leer el contenido del directorio de almacenamiento externo.

El problema que tienes que en Android 10, si es que cambiaste el targetSDK, ya no se permite de forma predeterminada leer otro directorio, afuera del que se crea para tu aplicación, de forma predeterminada debes poder leer únicamente en :

 /storage/emulated/0/Android/data/<package name>/

estos cambios son debidos a seguridad.

Answered by Jorgesys on February 19, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP