Я хотел бы определить папку камеры на каждом устройстве 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:
Я обновил метод для получения изображения на устройстве & также фильтровать папки.
Я думаю, что для достижения этого должны быть некоторые методы. По крайней мере, для покрытия большинства устройств. Я думаю о облачных приложениях, которые имеют функциональность для фотографий с автозаполнениями, и они делают резервную копию только фотографий, сделанных с помощью камеры устройства ... Если у вас есть предложения, которые были бы замечательными:) ... Спасибо –
@IonutNegru: " По крайней мере, для покрытия большинства устройств »- это будет« Environment.getExternalStoragePublicDirectory (Environment.DIRECTORY_DCIM) », как указано во втором абзаце моего ответа. – CommonsWare
Я попытался использовать это, и получил те же результаты с помощью метода, который использовал. Он включает в себя другие изображения, которые не были сняты с камерой ... На данный момент я фильтрую их, проверяя с помощью некоторых жестко закодированных имен папок, камера "или" 100andro "... но это просто временно, пока я не найду более надежное решение ... Я буду обновлять свой код завтра новым методом ... Тем не менее, спасибо за ответ и за ваше время! –