检查文件是图像还是视频

时间:2013-07-12 15:07:38

标签: android

有没有办法检查我作为URI加载的文件是android中的图像还是视频?我正在尝试动态地将图像和视频加载到片段中以获得列表/详细信息视图,并且需要区分它们。

4 个答案:

答案 0 :(得分:45)

我会检查mimeType,然后检查它是否与图像或视频相对应。

用于检查文件路径是否为图像的完整示例为:

public static boolean isImageFile(String path) {
    String mimeType = URLConnection.guessContentTypeFromName(path);
    return mimeType != null && mimeType.startsWith("image");
}

视频:

public static boolean isVideoFile(String path) {
    String mimeType = URLConnection.guessContentTypeFromName(path);
    return mimeType != null && mimeType.startsWith("video");
}

答案 1 :(得分:10)

如果您从内容解析器获取Uri,则可以使用getType(Uri)获取mime类型;

ContentResolver cR = context.getContentResolver();
String type = cR.getType(uri); 

应该返回类似于“image / jpeg”的东西,你可以检查它的显示逻辑。

答案 2 :(得分:0)

通过ContentResolver检查类型似乎最合适(如jsrssoftware answer中所示)。虽然,在某些情况下,这可能会返回null

在这种情况下,我最终尝试将流解码为Bitmap以确认它在图像中(但只解码边界,因此它非常快且消耗的内存不多)。

我的图像测试器助手功能如下所示:

public static boolean checkIsImage(Context context, Uri uri) {
    ContentResolver contentResolver = context.getContentResolver();
    String type = contentResolver.getType(uri);
    if (type != null) {
        return  type.startsWith("image/");
    } else {
        // try to decode as image (bounds only)
        InputStream inputStream = null;
        try {
            inputStream = contentResolver.openInputStream(uri);
            if (inputStream != null) {
                BitmapFactory.Options options = new BitmapFactory.Options();
                options.inJustDecodeBounds = true;
                BitmapFactory.decodeStream(inputStream, null, options);
                return options.outWidth > 0 && options.outHeight > 0;
            }
        } catch (IOException e) {
            // ignore
        } finally {
            FileUtils.closeQuietly(inputStream);
        }
    }
    // default outcome if image not confirmed
    return false;
}

对于视频,可以采用类似的方法。我不需要它,但我相信MediaMetadataRetriever可用于验证流是否包含有效视频type检查失败。

答案 3 :(得分:-16)

最简单的方法是检查我猜的扩展名

if ( file.toString().endsWith(".jpg") {
//photo
} else if (file.toString().endsWith(".3gp")) {
//video
}