我很难找到缩略图。 和Thumbnail合作, 在运行 ICS 的 Nexus S 上用 Picasa 照片。 其他一切似乎都有效, 包括从 Picasa 获取原始图像并展示, 但让Thumbnail 似乎不起作用 。 我试图使用时有以下错误 :
E/MiniThumbFile( 1852): Got exception when reading magic, id = 5745625138093120418, disk full or mount read-only? class java.lang.IllegalArgumentException
W/MediaProvider( 540): original media doesn t exist or it s canceled.
磁盘不满,是读写功能,应用程序有外部存储写权限,照片确实存在于picasa上(我可以通过机器人画廊应用程序查看)。
Android 2.3的代码也很好, 但是它遵循了一种略微不同的路径, 因为2.3似乎下载了照片的副本, 并将实际的本地文件 / uri 交给您到新下载的图像上, 而不是给你内容 / uri 。
这是该代码的主要肉类:
public void addImage(Uri uri, boolean local)
{
ContentResolver resolver = getContentResolver();
Uri actualUri = uri;
Log.d(TAG, "addImage: original uri: " + uri.toString());
if(local) {
try {
List<String> uriPath = uri.getPathSegments();
String contentUri = Media.insertImage(resolver, uri.getPath(), uriPath.get(uriPath.size()-1), new String());
actualUri = Uri.parse(contentUri);
}
catch(java.io.FileNotFoundException ex) {
Log.e(TAG, "FileNotFoundException: ");
ex.printStackTrace();
}
}
Log.d(TAG, "addImage: actual uri: " + actualUri.toString());
List<String> uriPath = actualUri.getPathSegments();
long imageId = Long.parseLong(uriPath.get(uriPath.size() -1));
Bitmap thumb = Thumbnails.getThumbnail(resolver, imageId, Thumbnails.MINI_KIND, null);
if(thumb == null) {
Log.e(TAG, "Failed to get thumbnail for our image.");
Toast toast = Toast.makeText(getApplicationContext(), "Failed to get thumbnail for image. Please try again.", Toast.LENGTH_SHORT);
toast.show();
return;
}
uris.add(uri);
bmps.add(thumb);
notifyDataSetChanged();
}
当应用程序“ 收集” 照片时, 将新照片添加到“ 收集” 照片中, 即使用此方法。 当它已知为本地图像时( 即: 如果照片来自应用程序内部, 或“ 活动Result s ” 数据参数为空), 本地参数将设定为真实, 我试图从媒体内容提供商处获取一个内容:// uri 回来, 这样我们就可以从一个有效的图像id 传递到 Thumbnails. getThumbnail 。 该代码对来自相机应用程序( 启动 ActionivityForResult) 的图像以及存储在本地设备上的图片库的图像非常有效 。
我有点醉了