- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,用户可以在其中选择文件,可以是来自相机的新图像、来自图库的图像,也可以是普通的旧文件。然后它会显示所选项目的图标和名称。我有这个工作,但有一个异常(exception)。图库应用程序集成了 picasaweb 图片。如果用户从 Picasa 相册中选择一张图片,我将无法获取它的缩略图。
我使用的是 MediaStore.Images.Thumbnails.getThumbnail() 方法,它适用于图库中的其他图像,但对于 picasaweb 文件,无论我尝试使用哪种缩略图,我都会得到得到(尽管 MICRO 是我所追求的):
ERROR/MiniThumbFile(2051): Got exception when reading magic, id = 5634890756050069570, disk full or mount read-only? class java.lang.IllegalArgumentException
我注意到为所选文件提供的 URI 不同。本地镜像文件如下所示:
content://media/external/images/media/6912
并且 picasaweb url 看起来像:
content://com.android.gallery3d.provider/picasa/item/5634890756050069570
我尝试使用 Thumbnails.queryMiniThumbnails() 和投影数组中的 Thumbnails.THUMB_DATA 来使用查询获取原始 THUMB_DATA,但出现“没有这样的列”错误。
有没有其他方法可以更好地获取缩略图?当我尝试访问完整图像数据时是否会遇到同样的问题?
最佳答案
我发现在我的 Galaxy Nexus 上,Picassa 的图像存储在/sdcard/Android/data/com.google.android.apps.plus/cache 目录下的一个子目录中。当内容提供者为 com.google.android.gallery3d.provider 时,URL 中“item”之后的数字包含图像的名称(在上面的示例中为“5634890756050069570”)。此数据对应于/sdcard/Android/data/com.google.android.apps.plus/cache 下的子目录之一中的扩展名为“.screen”的文件。如果您要使用 DDMS 从您的手机(在您的情况下为 5634890756050069570.screen)复制此图像并使用扩展名“.jpeg”重命名它,您可以打开它并在您的计算机上查看它。
以下 onActivityResult 方法将检查返回的内容提供程序,然后递归搜索/sdcard/Android/data/com.google.android.apps.plus/cache 目录中的文件。私有(private)成员变量fileSearchPathResults由递归搜索方法walkDirectoryRecursivelySearchingForFile()填充。
private String fileSearchPathResult = null;
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };
String filePath = null;
// This code is required to get the image path on content providers
// on API > 10 where the image is from a picassa web album, since Google changed
// the content provider in versions with API > 10
if (selectedImage.toString().contains("com.google.android.gallery3d.provider")) {
StringBuilder contentProviderPath = new StringBuilder(selectedImage.toString());
int beginningIndex = contentProviderPath.lastIndexOf("/");
String fileNameWithoutExt = contentProviderPath.subSequence(beginningIndex + 1,
contentProviderPath.length()).toString();
Log.i(TAG, fileNameWithoutExt);
try {
File path = new File("/sdcard/Android/data/com.google.android.apps.plus/cache");
if (path.exists() && path.isDirectory()) {
fileSearchPathResult = null;
walkDirectoryRecursivelySearchingForFile(fileNameWithoutExt, path);
if (fileSearchPathResult != null) {
filePath = fileSearchPathResult;
}
}
} catch (Exception e) {
Log.i(TAG, "Picassa gallery content provider directory not found.");
}
}
}
public void walkDirectoryRecursivelySearchingForFile(String fileName, File dir) {
String pattern = fileName;
File listFile[] = dir.listFiles();
if (listFile != null) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
walkDirectoryRecursivelySearchingForFile(fileName, listFile[i]);
} else {
if (listFile[i].getName().contains(pattern)) {
fileSearchPathResult = listFile[i].getPath();
}
}
}
}
}
通过文件路径,您可以使用以下代码创建图像的位图:
Bitmap sourceImageBitmap = BitmapFactory.decodeFile(filePath);
关于android - 如何获取从图库中选择的 Picasa 图片的缩略图?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7778693/
我有一个具有可变数量子元素的固定大小的 div。我不知道 children 的大小。目标是缩小它们以适合父级。 例子: .parent { width: 100px; height: 100p
我是一名优秀的程序员,十分优秀!