检测Android Camera文件夹

时间:2013-12-06 16:29:48

标签: android camera directory

我想检测每个Android设备上的相机文件夹。据我所知,这个文件夹与制造商不同,并且无法保证设备上甚至还有一个DCIM文件夹。

这是我现在用来获取文件的方法:

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

我已经更新了在设备上获取图像的方法。也过滤文件夹。

1 个答案:

答案 0 :(得分:7)

有数十个,也许是数百个相机应用随设备一起提供,可与数千个可供下载的相机应用配合使用。没有必要使用特定的“相机文件夹”,并且没有人必须将图像编入MediaStore索引。

设备的传统“相机文件夹”将位于Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM)指定的位置。如果没有相机应用程序使用它,该目录可能还不存在。但是,再一次,没有要求相机应用程序使用它 - 他们可以将图像存储在任何他们想要的地方,包括您无法访问的地方(例如,内部存储,“云”)。

  

如何只检索用相机拍摄的图像?

你做不到。这个星球上有超过10亿部智能手机,任何手机都可以通过任何其他手机的任何相机拍摄照片,礼貌照片分享应用程序和网站。这是智能手机以外的相机拍摄的照片。不要求设备自己的相机拍摄的图像需要以某种方式指定为您的利益。