从不在库中的目录打开图像

时间:2013-08-31 21:16:29

标签: android

我想打开我创建但不在图库中的文件夹中的所有图像。到目前为止,我已经搜索过,并且已经开始工作了。唯一的问题是它只显示图像库,显示我要选择的文件夹。就像它忽略了路径和默认的画廊。我正在做的事情有什么问题吗?请保持温和,我经常搜索和搜索更多,但可能还不够?下面是我正在使用的片段。

另外,我在这里尝试了解决方案:Built-in gallery in specific folder,但它只显示一个图像,而不是目录中的所有图像。也许我需要回到这个并改变它的工作?

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

    Log.v(TAG,"targetUri: " + getRealPathFromURI(targetUri) + "folderPath: " + folderPath);

    Intent intent = new Intent(Intent.ACTION_PICK);
    intent.setDataAndType(targetUri, "vnd.android.cursor.dir/image");
    startActivityForResult(intent,SELECT_PHOTO);
}

2 个答案:

答案 0 :(得分:0)

每当您使用ACTION_PICK之类的操作时,您都隐含地将控制权移交给另一个应用程序,就像链接到第三方网站将控制权交给另一个网站一样。

在这种情况下,不要求设备具有可以从特定目录执行ACTION_PICK的任何操作。设备可能具有零个,一个或N个能够执行此操作的应用程序。这些应用程序是什么以及它们的作用取决于各自的作者。

因此,如果您的应用程序的功能取决于用户从特定目录中选择图像的能力,您需要自己实现。如果这是一个很好的,但不是必需的,你可以坚持ACTION_PICK,但建议用户安装你确定的那样的文件浏览器应用程序提供你想要的结果。

答案 1 :(得分:0)

这是一个简化的

private  MediaScannerConnection conn;
private void notifySystemWithImage(final File imageFile) {

        conn = new MediaScannerConnection(this, new MediaScannerConnectionClient() {

        @Override
        public void onScanCompleted(String path, Uri uri) {

            try {
                if (uri != null) {
                    Intent intent = new Intent(Intent.ACTION_VIEW);
                    intent.setDataAndType(uri, "image/*");
                    startActivity(intent);
                }
            } finally {
                conn.disconnect();
                conn = null;
            }
        }

        @Override
        public void onMediaScannerConnected() {
            conn.scanFile(imageFile.getAbsolutePath(), "*/*"); 

        }
    });

    conn.connect();
}