4

我正在使用Gallery3D(froyo-stable)

我正在尝试制作一个仅在图库视图中显示特定文件夹中的图像的小应用程序。

Uri targetUri = Media.EXTERNAL_CONTENT_URI;
String folderPath = Environment.getExternalStorageDirectory().toString() + "/DCIM/";
int folderBucketId = folderPath.toLowerCase().hashCode();
targetUri = targetUri.buildUpon().appendQueryParameter("bucketId", String.valueOf(folderBucketId)).build();

initializeDataSource()

// Creating the DataSource objects.
final LocalDataSource localDataSource = new LocalDataSource(Gallery.this, targetUri.toString(), false);

但我有错误

"Error finding album " + bucketId);

CacheService.loadMediaSets.

 Log.e(TAG, "Error finding album " + bucketId);

我怎样才能解决这个问题?谢谢

4

2 回答 2

2

假设您需要在文件夹下找到文件的路径。

    private String[] mFileStrings;
private File[] listFile;

public void getFromSdcard()
{
    File file=  new File(android.os.Environment.getExternalStorageDirectory(),"Your Folder Name");

        if (file.isDirectory())
        {
            listFile = file.listFiles();
            mFileStrings = new String[listFile.length];

            for (int i = 0; i < listFile.length; i++)
            {
                mFileStrings[i] = listFile[i].getAbsolutePath();
                System.out.println("...................................."+mFileStrings[i]);
            }
        }
}

在我的手机中,我的内部存储器被命名为 sdcard0。所以为了确保你得到正确的路径,你可以使用下面的代码。

 String externalpath = new String();
 String internalpath = new String();

public  void getExternalMounts() {
Runtime runtime = Runtime.getRuntime();
try
{
Process proc = runtime.exec("mount");
InputStream is = proc.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
String line;

BufferedReader br = new BufferedReader(isr);
while ((line = br.readLine()) != null) {
    if (line.contains("secure")) continue;
    if (line.contains("asec")) continue;

    if (line.contains("fat")) {//external card
        String columns[] = line.split(" ");
        if (columns != null && columns.length > 1) {
            externalpath = externalpath.concat("*" + columns[1] + "\n");
        }
} 
        else if (line.contains("fuse")) {//internal storage
        String columns[] = line.split(" ");
        if (columns != null && columns.length > 1) {
            internalpath = internalpath.concat(columns[1] + "\n");
        }
    }
}
}
catch(Exception e)
{
    e.printStackTrace();
}
 System.out.println("Path  of sd card external............"+externalpath);
 System.out.println("Path  of internal memory............"+internalpath);
}

替代:

您也可以使用 3d 轮播来显示图像,使用渲染脚本作为替代方案。

http://code.google.com/p/android-ui-utils/downloads/detail?name=CarouselExample.zip

结果快照。Carousel 3d 在 Jelly Bean 上进行了测试。

在此处输入图像描述

于 2013-03-24T09:55:37.027 回答
1

“查找专辑时出错”问题很可能是由于您bucketId在代码中获取的“DCIM”文件夹中没有直接包含任何图像的事实。例如,如果您改用“/DCIM/Camera”(假设那里有一些图像),则不应出现错误。

但是,如果我正确理解您想要什么,我相信您需要对 Gallery3D 代码进行其他修改,以便在您遵循这条路线时使其在启动时显示特定文件夹(因为代码并非旨在像这样使用)。

我相信您可以通过将意图设置为以下特定内容,而不是使用上面的代码,更轻松地实现您想要的目标onCreate()

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setIntentToSpecificFolder();

    mApp = new App(Gallery.this);
    // :
    // the rest of onCreate() code
    // :
    Log.i(TAG, "onCreate");
}

private void setIntentToSpecificFolder() {
    String folderPath = Environment.getExternalStorageDirectory().toString() + "/DCIM/Camera";
    int folderBucketId = folderPath.toLowerCase().hashCode();
    Uri targetUri = Media.EXTERNAL_CONTENT_URI.buildUpon().appendQueryParameter("bucketId", String.valueOf(folderBucketId)).build();

    Intent intent = new Intent(Intent.ACTION_VIEW);
    intent.setDataAndType(targetUri, "vnd.android.cursor.dir/image");
    setIntent(intent);
}

基本上,我们在这里所做的是利用ACTION_VIEW应用程序在提供vnd.android.cursor.dir/imageMIME 类型时的意图处理。

于 2013-03-24T06:51:07.870 回答