终于有空去解决这个问题了,以前一直以为这个库只能加载图片,其实视频的缩略图也是可以加载的,但是如果视频名称里有中文名,加载就会报错
之前项目比较忙,就不去计较,趁今天下班有点空,忍不住要去查查原因。下载源码研究,结论如下:
首先第一步读取文件:
protected InputStream getStreamFromFile(String imageUri, Object extra) throws IOException {
String filePath = Scheme.FILE.crop(imageUri);
// 关键在这里
if (isVideoFileUri(imageUri)) {
return getVideoThumbnailStream(filePath);
} else {
BufferedInputStream imageStream = new BufferedInputStream(new FileInputStream(filePath), BUFFER_SIZE);
return new ContentLengthInputStream(imageStream, (int) new File(filePath).length());
}
}
然后现在进入 isvideouri 这个方法看看
private boolean isVideoFileUri(String uri) {
String extension = MimeTypeMap.getFileExtensionFromUrl(uri);
String mimeType = MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
return mimeType != null && mimeType.startsWith("video/");
}
问题就出在这里
MimeTypeMap.getFileExtensionFromUrl(uri);
这个方法是不支持中文字符的,所以简单,只要复制源码再修改下, 自己实现这个方法,即可 参考如下:
public static String getFileExtensionFromUrl(String url) {
if (!TextUtils.isEmpty(url)) {
int fragment = url.lastIndexOf('#');
if (fragment > 0) {
url = url.substring(0, fragment);
}
int query = url.lastIndexOf('?');
if (query > 0) {
url = url.substring(0, query);
}
int filenamePos = url.lastIndexOf('/');
String filename =
0 <= filenamePos ? url.substring(filenamePos + 1) : url;
// if the filename contains special characters, we don't
// consider it valid for our matching purposes:
if (!TextUtils.isEmpty(filename)) {
int dotPos = filename.lastIndexOf('.');
if (0 <= dotPos) {
return filename.substring(dotPos + 1);
}
}
}
return "";
}
参考了这位朋友的博客:http://blog.csdn.net/u012534158/article/details/51056313