2013-12-06 3 views
3

Я хотел бы определить папку камеры на каждом устройстве Android. Из того, что я читал, эта папка отличается от производителя другой, и нет гарантии, что на устройстве будет даже папка DCIM.Обнаружение папки с камерой Android

Это метод, который я использую, чтобы получить файлы в настоящее время:

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)); 
    } 

Но это возвращающиеся изображения из других мест также ... Как я могу получить только изображения, снятые камерой ? Если этого не существует, где можно найти имена папок, используемых каждым производителем (сколько их есть), чтобы я мог фильтровать его по BUCKET_DISPLAY_NAME?

Спасибо

LE:

Я обновил метод для получения изображения на устройстве & также фильтровать папки.

ответ

7

Есть десятки, возможно, сотни приложений для камеры, которые поставляются с устройствами, чтобы использовать тысячи приложений для камеры, доступных для загрузки. Никому не нужно использовать определенную «папку камеры», и ни один из них не должен индексировать свои изображения на MediaStore.

Обычная папка камеры для устройства будет находиться в указанном Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM). Этот каталог может еще не существовать, если приложение камеры не использовало его. Но, опять же, нет необходимости использовать приложение камеры - они могут хранить свои изображения везде, где захотят, включая места, к которым вы не можете получить доступ (например, внутреннее хранилище, «облако»).

Как получить только изображения, сделанные камерой?

Вы не можете. На планете насчитывается более миллиарда смартфонов, и на любом телефоне могут быть сделаны снимки на любой камере с любого другого телефона, любезно предоставленные приложениями и сайтами для обмена фотографиями. Это выше снимков, сделанных камерами, отличными от смартфонов. Нет необходимости, чтобы изображения, сделанные собственной камерой устройства, должны были как-то обозначаться как таковые для вашей выгоды.

+0

Я думаю, что для достижения этого должны быть некоторые методы. По крайней мере, для покрытия большинства устройств. Я думаю о облачных приложениях, которые имеют функциональность для фотографий с автозаполнениями, и они делают резервную копию только фотографий, сделанных с помощью камеры устройства ... Если у вас есть предложения, которые были бы замечательными:) ... Спасибо –

+0

@IonutNegru: " По крайней мере, для покрытия большинства устройств »- это будет« Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DCIM) », как указано во втором абзаце моего ответа. – CommonsWare

+0

Я попытался использовать это, и получил те же результаты с помощью метода, который использовал. Он включает в себя другие изображения, которые не были сняты с камерой ... На данный момент я фильтрую их, проверяя с помощью некоторых жестко закодированных имен папок, камера "или" 100andro "... но это просто временно, пока я не найду более надежное решение ... Я буду обновлять свой код завтра новым методом ... Тем не менее, спасибо за ответ и за ваше время! –

Смежные вопросы