¿Qué es MINI_THUMB_MAGIC y cómo usarlo?
Fondo
He notado una extraña columna para MediaStore.Images.ImageColumns llamada " MINI_THUMB_MAGIC ".
La documentación dice justo eso:
- Guardar la imagen de base64encoded a la base de datos del servidor como BLOB
- Cómo usar rawQuery en android
- La mejor manera de acceder a la base de datos en el servidor mediante la aplicación Android
- Comprobar si existe una entrada en una base de datos
- ¿Qué caracteres no se pueden utilizar para valores en bases de datos SQLite?
El mini id del pulgar.
Tipo: INTEGER
Valor constante: "mini_thumb_magic"
La pregunta
Mi conjetura es que este campo está relacionado con MediaStore.Images.Thumbnails .
Es correcto ? Si no, ¿qué es esto y cómo lo usas?
Si es correcto, tengo otras preguntas relacionadas con él:
-
¿Es una mini imagen del tamaño del original? ¿Utiliza la misma relación de aspecto o hace recorte en el centro?
-
¿Por qué el tamaño de "MICRO" es cuadrado (96 x 96) y el tamaño de "MINI" es un rectángulo no cuadrado (512 x 384)?
-
¿Como lo usas? Mi conjetura es que se hace usando " THUMB_DATA ", que es un blob, así que lo usas así, pero entonces ¿cuál es el propósito de usar " getThumbnail " si ya tienes este campo?
-
¿Obtiene una miniatura girada en caso de que el valor de orientación no sea 0? Lo que significa que si deseo mostrarlo, no necesitaré girar la imagen?
-
¿Es posible hacer una consulta de las imágenes junto con sus miniaturas? Tal vez utilizando inner join?
-
¿Está disponible para todos los dispositivos y versiones Android?
-
¿Por qué se llama "magia"? ¿Es porque también está disponible para videos (y por alguna razón no existe para la música, como podría ser la foto de portada del álbum, por ejemplo)?
- ¿Consulta para obtener registros basados en Radius en SQLite?
- Obtener la distancia más corta desde un punto
- Filtra un managedQuery por extensión de archivo (o, alternativamente, tipo de archivo) para un Cursor de Android
- Enigma de encriptación
- Cursor while loop devuelve cada valor pero el último
- Error de Android sql al usar SUM
- NPE intermitente al insertar datos en SQLite
- Android SQLite Eliminar problema de fila
Compruebe este archivo: https://github.com/android/platform_packages_providers_mediaprovider/blob/master/src/com/android/providers/media/MediaThumbRequest.java en el código fuente de Android. Este valor es un número mágico que permite determinar si la miniatura sigue siendo válida. Yo no investigar ese archivo más, pero no debería ser cuestión de poco para bucear más profundo. A sus preguntas:
- No, no mini-imagen de tamaño
- Bueno, supongo que es una definición de Google que quiere tener una miniatura cuadrada para algunas listas, donde sólo las vistas previas muy pequeñas deben ser visibles y donde muchos elementos deben caber en la pantalla y hay otro formato de miniatura donde las imágenes son más grandes …
- No lo sé, pero de acuerdo con el documento de Google, uno (THUMB_DATA) es sólo algunos raw byte matriz de la miniatura (dunno en qué formato) y el otro (getThumbnail) recupera un objeto de mapa de bits de pleno derecho …
- No lo sé
- No lo sé
- Supongo que sí, ya que es parte del código fuente de AOSP.
- La palabra "magia" se utiliza a menudo para algún tipo de identificador. Hay "paquetes mágicos" que pueden despertar una computadora desde el sueño o apagado a través de la red, hay números mágicos en los discos duros, donde algunos sectores (por ejemplo, el MBR) tiene los valores hexadecimales AA 55 en sus últimas dos bytes, Son también números mágicos en los archivos de imagen que ayudan a los paquetes de software a determinar el tipo de imagen (por ejemplo, los archivos GIF comienzan con GIF89a o GIF87a (ASCII), los archivos JPEG comienzan con FF D8 hexadecimal) y hay muchos, muchos más ejemplos. Por lo tanto, los números mágicos son un término muy común aquí 🙂
De acuerdo con el código fuente en la siguiente URL, el número mágico es el Id de la imagen original * una constante. Ese valor entonces se utiliza para comprobar para un int largo. Si int no es como se esperaba, se considera fuera de sincronización con el medio de imagen.
// Get the magic number for the specified id in the mini-thumb file. // Returns 0 if the magic is not available. public synchronized long getMagic(long id) { // check the mini thumb file for the right data. Right is // defined as having the right magic number at the offset // reserved for this "id". RandomAccessFile r = miniThumbDataFile(); if (r != null) { long pos = id * BYTES_PER_MINTHUMB; FileLock lock = null; try { mBuffer.clear(); mBuffer.limit(1 + 8); lock = mChannel.lock(pos, 1 + 8, true); // check that we can read the following 9 bytes // (1 for the "status" and 8 for the long) if (mChannel.read(mBuffer, pos) == 9) { mBuffer.position(0); if (mBuffer.get() == 1) { return mBuffer.getLong(); } } } catch (IOException ex) { Log.v(TAG, "Got exception checking file magic: ", ex); } catch (RuntimeException ex) { // Other NIO related exception like disk full, read only channel..etc Log.e(TAG, "Got exception when reading magic, id = " + id + ", disk full or mount read-only? " + ex.getClass()); } finally { try { if (lock != null) lock.release(); } catch (IOException ex) { // ignore it. } } } return 0; }
Recibí la excepción de tiempo de ejecución al intentar obtener el Id original de una miniatura buscando el recorrido de la miniatura. (BTW, el disco no está lleno y no es de sólo lectura.)
- ¿Es posible detectar si la aplicación Google Fit está instalada y utilizada por el usuario?
- Cómo enviar json de android a php?