[Android]图库加载HTC Desire的问题:路径错误?

时间:2011-07-18 12:06:48

标签: android path gallery loading

我想展示图片库。问题出在加载过程中。

一开始,我正在加载图片:

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手机获得图像的良好路径?是他们的一个能够返回专辑路径的对象吗?

谢谢:)

(抱歉错误)

1 个答案:

答案 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对象用作所有设备上的游标,这将解决您在不同目录中遇到的问题。

希望这有帮助, 乔治