¿Cuál es la diferencia real entre ACTION_GET_CONTENT y ACTION_OPEN_DOCUMENT?

Me cuesta comprender la diferencia entre ACTION_OPEN_DOCUMENT y ACTION_GET_CONTENT cuando se utilizan para abrir un documento que se puede abrir . Si estoy apoyando a Andriod antes de KitKat, que no es compatible con ACTION_OPEN_DOCUMENT , ¿debo resolver con ACTION_GET_CONTENT ?

La documentación dice esto:

ACTION_OPEN_DOCUMENT no pretende sustituir a ACTION_GET_CONTENT . El que debe usar depende de las necesidades de su aplicación:

  • Utilice ACTION_GET_CONTENT si desea que su aplicación simplemente lea / importe datos. Con este enfoque, la aplicación importa una copia de los datos, como un archivo de imagen.
  • Utilice ACTION_OPEN_DOCUMENT si desea que su aplicación tenga acceso persistente a largo plazo a documentos propiedad de un proveedor de documentos. Un ejemplo sería una aplicación de edición de fotografías que permite a los usuarios editar imágenes almacenadas en un proveedor de documentos.

¿ ACTION_GET_CONTENT no ACTION_GET_CONTENT también proveedores de documentos en KitKat? ¿Qué me impediría tener "acceso a largo plazo y persistente" y qué significa exactamente eso?

Básicamente, ¿cuál es la diferencia entre los siguientes dos fragmentos?

ACTION_GET_CONTENT

 Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("*/*"); 

ACTION_OPEN_DOCUMENT

 Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.setType("*/*"); 

¿ACTION_GET_CONTENT no utiliza también proveedores de documentos en KitKat?

No necesariamente. Eso depende de la implementación de la aplicación que está publicando el contenido. Observe también que DocumentProvider es un tipo específico de ContentProvider .

¿Qué me impediría tener "acceso a largo plazo, persistente"

El Uri que recibe de ACTION_GET_CONTENT puede tener una concesión de permiso temporal con él para su aplicación, para poder leer y / o escribir el contenido. Esa subvención eventualmente caducará (por ejemplo, cuando termine su proceso). Así, por ejemplo, guardar el Uri como una cadena en una base de datos puede ser inútil.

Parte del marco de acceso de almacenamiento incluye el concepto de que un proveedor de contenido puede ofrecer concesiones de permiso que pueden durar por un período prolongado ("a largo plazo, persistente"). Aunque no hay nada que impida que una aplicación ofrezca permisos persistentes con ACTION_GET_CONTENT en el nivel 19+ de la API, será más común con ACTION_OPEN_DOCUMENT .

Básicamente, ¿cuál es la diferencia entre los siguientes dos fragmentos?

La experiencia del usuario será algo diferente, ya que ACTION_OPEN_DOCUMENT proporciona una interfaz normalizada de explorador de archivos, mientras que ACTION_GET_CONTENT es un diálogo de selector tradicional, seguido de alguna interfaz de usuario específica de la aplicación.

Desde su punto de vista como consumidor de este contenido, ACTION_GET_CONTENT es si desea utilizar el contenido ahora; ACTION_OPEN_DOCUMENT es si desea utilizar el contenido ahora y posteriormente.

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