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.

  • En AOSP, donde se implementa el ServiceManager
  • No se reconoce la carpeta de Google Drive al descargarla en la aplicación de Android
  • Pasar objetos activos entre servicios a través de AIDL
  • Lista de nombres de carpetas de directorios de la tarjeta SD de Android
  • Diferencias entre / sdcard / emulated / 0 y / sdcard
  • Seguridad de la carpeta de Android
  • Donde está ADB, Android Debug Bridge, código fuente de los componentes ubicado en el proyecto de código abierto de Android
  • Binder de Android que borra la identidad del llamante
  • Cómo manejar: java.util.concurrent.TimeoutException: android.os.BinderProxy.finalize () tiempo de espera después de 10 segundos de errores?
  • Carpeta java de Java ¿TRANSACCIÓN DE BINDER FALLA?
  • Tratando de guardar la imagen en una carpeta de imágenes determinada que no se ha creado
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.