Detectar la carpeta de la cámara Android

Me gustaría detectar la carpeta de la cámara en todos los dispositivos Android. De lo que he leído esta carpeta se diferencia de un fabricante a otro y no hay garantía de que habrá incluso una carpeta DCIM en el dispositivo.

Este es el método que estoy usando para obtener los archivos ahora:

private static final Set<String> FILTER_FOLDERS = new HashSet<String>( Arrays.asList(new String[] { "camera", "100andro", "100media" })); private Set<String> getCameraPictures() { final String[] columns = new String[] { MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA, MediaStore.Images.ImageColumns.BUCKET_DISPLAY_NAME, MediaStore.Images.ImageColumns.DISPLAY_NAME, MediaStore.Images.ImageColumns.DATE_TAKEN, MediaStore.Images.ImageColumns.MIME_TYPE }; // Order by options - by date & descending final String orderBy = MediaStore.Images.ImageColumns.DATE_TAKEN + " DESC"; // Stores all the images from the gallery in Cursor final Cursor cursor = getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, // base URI for // the Images columns, // Which columns to return null, // Which rows to return (all rows) null, // Selection arguments (none) orderBy); // Ordering // Total number of images int count = cursor.getCount(); // Create an array to store path to all the images String[] picturesPath = new String[count]; if (cursor.moveToFirst()) { int dataColumn = cursor .getColumnIndex(MediaStore.Images.Media.DATA); int bucketColumn = cursor .getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME); do { if (FILTER_FOLDERS.contains(cursor.getString(bucketColumn) .toLowerCase(Locale.getDefault()))) { // Store the path of the image picturesPath[cursor.getPosition()] = cursor .getString(dataColumn); } } while (cursor.moveToNext()); } // Close the cursor if (null != cursor) { cursor.close(); } return new HashSet<String>(Arrays.asList(picturesPath)); } 

Pero esto es devolver imágenes de otros lugares también … ¿Cómo puedo recuperar sólo las imágenes tomadas con la cámara? Si no hay forma nativa de hacerlo, ¿dónde puedo encontrar cuáles son los nombres de las carpetas utilizadas por cada fabricante (tantas como hay) para poder filtrarlo por BUCKET_DISPLAY_NAME?

Gracias

LE:

He actualizado el método para obtener las imágenes en el dispositivo y también filtrar las carpetas.

Hay docenas, quizás cientos, de aplicaciones para cámaras que vienen con dispositivos, para ir junto con miles de aplicaciones de cámara disponibles para descargar. Ninguno tiene que usar una "carpeta de cámara" particular y ninguno tiene que tener sus imágenes indexadas por MediaStore .

La "carpeta de cámara" convencional para un dispositivo estará en la ubicación especificada por Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM) . Es posible que ese directorio no exista todavía, si ninguna aplicación de cámara lo ha utilizado. Pero, de nuevo, no hay ningún requisito de que una aplicación de cámara lo use – pueden almacenar sus imágenes donde quiera, incluyendo lugares a los que no puede acceder (por ejemplo, almacenamiento interno, "la nube").

¿Cómo puedo recuperar sólo las imágenes tomadas con la cámara?

No puedes. Hay más de mil millones de teléfonos inteligentes en el planeta, y cualquier teléfono puede tener fotos en él tomadas por cualquier cámara de cualquier otro teléfono, cortesía de la foto de compartir aplicaciones y sitios. Esto está en la parte superior de las fotografías tomadas por las cámaras que no son teléfonos inteligentes. No es necesario que las imágenes tomadas por la propia cámara del dispositivo necesitan ser designadas de alguna manera como tales para su beneficio.

  • Cómo guardar las fotos tomadas en una carpeta específica?
  • Acceso a Unity StreamingAssets en Android
  • Seguridad de la carpeta de Android
  • Android: ¿Cómo abrir una carpeta específica a través de Intent y mostrar su contenido en un navegador de archivos?
  • En AOSP, donde se implementa el ServiceManager
  • No tiene ningún directorio de librerías en Android Studio
  • Zip / comprimir una carpeta llena de archivos en android
  • Tratando de guardar la imagen en una carpeta de imágenes determinada que no se ha creado
  • Pasar objetos activos entre servicios a través de AIDL
  • Descriptor de archivos compartidos con la carpeta de Android
  • Renombrar carpeta en la tarjeta SD
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.