我想展示图片库。问题出在加载过程中。
一开始,我正在加载图片:
images = new File("/sdcard/DCIM/Camera/");
if(images.listFiles().length==0)
//no images, do some other stuff...
else
//put images in the gallery and do some stuff
此代码适用于模拟器(Android 2.2 - API Level 8)和Samsung Galaxy S2(Android 2.2.1)。但我请一些朋友用自己的手机(HTC,LG ......)测试这段代码。
使用HTC Desire时,此加载过程中出现问题。代码进入“//无图像”,但他们在相册中有图像(例如来自相机...)我的朋友告诉我:
相册存储在内部存储器中,而不是存储在带HTC的SD卡中。
所以我试图检查其他目录,如下所示:
//Get the internal content
images = new File(MediaStore.Images.Media.INTERNAL_CONTENT_URI.getPath());
if (!images.isDirectory()) {
//Get the external content
images = new File(MediaStore.Images.Media.EXTERNAL_CONTENT_URI.getPath());
}
if (!images.isDirectory()) {
//Get the SD Card content
images = new File("/sdcard/DCIM/Camera/");
}
但仍然无法正常工作:(这不是一个好目录:/
所以,我的问题是:我如何通过所有Android手机获得图像的良好路径?是他们的一个能够返回专辑路径的对象吗?
谢谢:)
(抱歉错误)
答案 0 :(得分:1)
我做了一些检查,看起来你正试图错误地访问MediaStore。它应该通过游标访问,而不是直接作为文件访问。
这是因为如http://developer.android.com/guide/topics/providers/content-providers.html
所述内容提供者将其数据公开为数据库模型上的简单表,其中每一行都是记录,每列是特定类型和含义的数据。
所以基本上你不能把URI作为文件读取。这是一个数据表。
以下是关于如何访问它的同一页面的示例。
import android.provider.Contacts.People;
import android.content.ContentUris;
import android.net.Uri;
import android.database.Cursor;
// Use the ContentUris method to produce the base URI for the contact with _ID == 23.
Uri myPerson = ContentUris.withAppendedId(People.CONTENT_URI, 23);
// Alternatively, use the Uri method to produce the base URI.
// It takes a string rather than an integer.
Uri myPerson = Uri.withAppendedPath(People.CONTENT_URI, "23");
// Then query for this specific record:
Cursor cur = managedQuery(myPerson, null, null, null, null);
此外,这是另一个Stackoverflow问题,其中有一些示例说明了如何使用游标。
How to query Android MediaStore Content Provider, avoiding orphaned images?
最后,基于上面的链接,我只会将mediastore对象用作所有设备上的游标,这将解决您在不同目录中遇到的问题。
希望这有帮助, 乔治