【问题标题】:[Android]Gallery loading problems with HTC Desire : wrong path?[Android] HTC Desire 的图库加载问题:路径错误?
【发布时间】:2011-10-07 15:20:36
【问题描述】:

我想展示一个图片库。问题出在加载它们的过程中。

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

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 级别 8)和三星 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 手机的图像的好路径?他们是一个能够返回专辑路径的对象吗?

谢谢:)

(有错误请见谅)

【问题讨论】:

  • 在我的 HTC Ddesire 标准相机应用程序中的照片存储在:/sdcard/DCIM/100MEDIA/,来自 Camera360 应用程序的照片在 /sdcard/DCIM/Camera/

标签: android path gallery loading


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

希望这会有所帮助, 乔治

【讨论】:

  • 好的,谢谢乔治。我刚刚在我的代码中添加了一个光标,它可以在模拟器上运行。我将在我朋友的手机(HTC Desire)上对其进行测试。当我测试它时,我会给你一个反馈;)
  • 好交易。很高兴为您服务!请告诉我。
  • 成功了!我们可以通过 HTC 访问专辑。谢谢你的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-20
  • 2012-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-01
相关资源
最近更新 更多