Cómo guardar imágenes locales en el álbum
Ambos métodos anteriores llaman a métodos del sistema y pasan el objeto de mapa de bits de la imagen o la ruta de la imagen como parámetro, pero aún así no puedes ver la imagen en el álbum simplemente llamándola de esta manera.
También necesitamos actualizar el álbum, lo cual se puede hacer usando el siguiente método:
El método anterior escanea la ruta de la imagen y muestra la imagen en el álbum.
Se puede decir que el método anterior también satisface las necesidades de visualización de imágenes en la mayoría de los teléfonos móviles, pero existen problemas de compatibilidad en otros teléfonos móviles como Huawei y OPPO. Mostrará la imagen en la parte superior del álbum. Por lo tanto, cuando hay muchos álbumes de fotos en el teléfono, tendremos la ilusión de que esta imagen no está insertada en el álbum de fotos.
Entonces, ¿por qué ocurre la situación anterior? Primero, echemos un vistazo a la información detallada de la imagen insertada:
Puede ver que la imagen está insertada en la parte superior (el subíndice de la imagen es 1/304), y luego mire la información detallada de la imagen, la hora es en realidad 1/1/1970 08:00:00. Sabemos que las imágenes del álbum están ordenadas en orden cronológico ascendente, por lo que no es de extrañar que las imágenes se inserten en la parte superior.
Echemos un vistazo a por qué la hora es 1970/1/1 08:00:00. Comenzaremos desde el código fuente para encontrar el motivo e iremos directamente al método MediaStore.Images.Media.insertImage():
A través del código fuente anterior, podemos ver que la imagen se inserta a través de contentProvider. insertado, llamado Es el método de inserción ContentResolver, en el que el segundo parámetro es el objeto ContentValues, que contiene información sobre la imagen. Por ejemplo, lo anterior solo contiene el título, la descripción y el tipo de imagen. Vemos que arriba solo se colocan tres pares clave-valor, y cada clave es una constante de la interfaz MediaColumns. Echemos un vistazo a otras constantes. En la imagen, puede ver que también hay una constante DATE_TAKEN. Miremos de nuevo. Mire sus comentarios:
Este parámetro representa el momento en que se tomó la fotografía. La unidad de este tiempo es milisegundos y la base de tiempo es el 1 de enero de 1970. ¿Le resulta familiar? La fecha detallada de la imagen de arriba también es el 1 de enero de 1970.
Entonces, ¿podemos suponer que llamar al método MediaStore.Images.Media.insertImage() establecerá de manera predeterminada la hora en el 1 de enero de 1970 y, por lo tanto, mostrará la imagen en la parte superior del álbum?
Ahora que entendemos por qué, resolveremos este problema escribiendo nuestro propio método para insertar la imagen después de MediaStore.Images.Media.insertImage() y escribiremos la hora de la imagen en él. El método específico es el siguiente:
Después de utilizar el método anterior, la imagen se puede guardar con éxito en el álbum del sistema y mostrarse correctamente al final del álbum. Además, hemos creado nuestra propia carpeta de álbumes "myPhotos" donde podemos guardar todas las imágenes de la aplicación en nuestra propia carpeta de álbumes.