Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Eliminar archivos a través de un 'ContentResolver' en lugar de eliminarlos a través de 'file.delete ()'

Acabo de escribir una función en una aplicación de Android que elimina un archivo utilizando la clase estándar de "archivo" en Java. es decir:

String fileName= "/mnt/Gallery/Img001.jpg"; File file = new File(fileName); file.delete(); 

Mientras que el procedimiento anterior es bastante simple, me he estado preguntando si hay alguna ventaja de hacer el mismo vía un 'ContentResolver'. Cualquier consejo sería apreciado.

Aclamaciones,

Jarryd

—————————————— EDIT ——- ———————————

A continuación, se muestra un ejemplo de cómo eliminar un archivo a través de Content Resolver. En este ejemplo se supone que el archivo que se está eliminando es una imagen y que su 'id' es conocido.

 long mediaId = 155; // NOTE: You would normally obtain this from the content provider! Uri contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; Uri itemUri = ContentUris.withAppendedId(contentUri, mediaId); int rows = getContentResolver().delete(itemUri, null, null); String path = itemUri.getEncodedPath(); if(rows == 0) { Log.e("Example Code:","Could not delete "+path+" :("); } else { Log.d("Example Code:","Deleted "+path+ " ^_^"); } 

  • ¿Cómo olvidar una red inalámbrica en android mediante programación?
  • Android días restantes
  • Android Studio: crea un proyecto Java sin dependencias de Android
  • ¿Por qué el argumento de tipo explícito debe ser reemplazado por el diamante?
  • El uso de 1.7 requiere la compilación con Android 4.4 (KitKat); Actualmente utilizando API 14
  • Android: escala y comprime un mapa de bits
  • Perspectivas de Android de Eclipse
  • Java.lang.NoClassDefFoundError: en dalvik.system.NativeStart.main (Método nativo)
  • One Solution collect form web for “Eliminar archivos a través de un 'ContentResolver' en lugar de eliminarlos a través de 'file.delete ()'”

    El marco de proveedores de contenido de Android tiene ciertas ventajas adicionales en comparación con la manipulación directa de datos.

    Puede pensar en las líneas de '¿Dónde reside el archivo y quién puede estar eliminándolo'.

    escenario 1

    El archivo reside en la tarjeta SD (una ruta accesible para tu aplicación) y tu aplicación la está eliminando.

    Solución: Ya que el camino es accesible para usted, el enfoque java funcionará con un archivo Uri como:

    File: //mnt/sdcard/downloads/image.jpeg

    Escenario 2

    El archivo reside en otra aplicación (por ejemplo, dropbox) y su aplicación debe eliminar el archivo.

    Solución : Esto significa que el archivo reside realmente en el almacenamiento privado de otra aplicación. Un archivo: Uri el enfoque anterior le dará acceso denegado. Por lo tanto, su aplicación tendrá que buscar un Uri de contenido de la aplicación que contiene el archivo y llamar a su proveedor de contenido para eliminar.

    FileUri = Uri.parse ("content: //" + packageContainingTheFile "+ fileId); // reemplazar esto con Uri obtenido de la aplicación getContext (). GetContentResolver (). Delete (fileUri, null, null);

    Escenario 3

    El archivo reside en el directorio de paquetes de su aplicación, es decir, en datos / datos / com.su paquete / yourfolder / yourfile.xxx y su aplicación es la única que lo elimina.

    Solución: Aquí, cualquiera de los métodos anteriores funcionará ya que tiene acceso para eliminar el archivo. Uri se verá así:

    File: //data/data/yourpackage/folder/file.ext

    La principal ventaja de usar el proveedor de contenido aquí es que automáticamente obtendrá el modelo de observador. Las devoluciones de llamada del proveedor de contenido son un punto de entrada bien definido desde el que se modifican los datos. Por lo tanto, es un lugar deseado para notificar a otros de los cambios utilizando:

    GetContext (). GetContentResolver (). Notify (uri, null)

    Suponga que tiene vistas que muestran una lista de dichos elementos de archivo. Tan pronto como la eliminación se hace, su puede ser notificado.

    Escenario 4

    El archivo reside en el directorio de paquetes de su aplicación, es decir, en datos / datos / com.su paquete / yourfolder / yourfile.xxx y desea exponer la función de eliminación a otras aplicaciones.

    Solución : Esto es similar al escenario 1, sólo al revés. Otras aplicaciones no pueden eliminar el archivo en tu almacenamiento privado con un Uri como

    File: //data/data/yourpackage/folder/file.ext // funciona solo para tu aplicación

    Tendrán que llamar a su proveedor de contenido para hacer esto con un Uri como.

    Content: // providerAuthority / delete / id que su proveedor de contenido necesitará asignar a file.ext ruta absoluta.

    Resumen

    Para concluir, el uso del proveedor de contenido es necesario es algunos escenarios, mientras que opcional en otros. Depende en gran medida de los requisitos de su aplicación. Si tiene vistas, CursorLoaders en su lugar y desea estar informado sobre las actualizaciones o desea exponer la eliminación de los datos de su aplicación a otras aplicaciones, el proveedor de contenido es el método más limpio.

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.