特定文件夹中的内置画廊

4
我将使用以下代码在我的应用程序中打开一个相册。

可能是重复的问题:
具有文件夹过滤器的相册

以下是我使用的代码:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivityForResult(intent, TEST_RESULT);

我需要使用内置图库应用程序来显示特定文件夹中的图像/视频列表。 - 当打开图库时,是否有某些Intent操作可以显示所选图像? - 是否有任何方法确定特定文件夹中的图像?我希望图库仅显示我的文件夹中的图像/视频(而不是其他系统文件夹)。

2
@peter_budo:首先请看两个问题之间的区别,我搜索了很多,这个问题是有效的,因为您上面建议的网址不是他所问的答案。 - PiyushMishra
@peter_budo 在这个世界上没有人是心灵读者,我试图提高一些管理员尽快关闭问题的事情,即使答案与问题无关,只需给他们一个链接,因此我谦虚地请求所有管理员首先从用户的角度看待问题。他/她想问什么。我不是说通过传递链接你做错了什么,但链接与用户所问的问题不太相关。 - PiyushMishra
@PiyushMishra 我不是管理员,只是想知道你从哪里得出那种无稽之谈。其次,链接的解决方案是可行的方法。你需要做的就是拿那段代码并稍作调整。不要指望别人会把“完整的代码放在金盘上”给你。 - peter_budo
@peter_budo 我完全不赞成将完整的代码摆在金盘上供人使用。我认为你首先需要学会说话,你可能是一个优秀的程序员,但你还需要学习一些东西。我结束这次对话,无需进一步讨论。祝你有美好的一天。 - PiyushMishra
3
你提供的链接中,有没有测试过任何代码?没有人告诉我们如何打开内置图库中的确切文件夹,除了Anthony曾经尝试过但是那段代码也无法工作,你可以在用户评论中看到这一点。时间对于我们两个同样重要,我想。请注意保留原文意思并使翻译更通俗易懂。 - PiyushMishra
显示剩余6条评论
1个回答

10

您只需要在活动中实现MediaScannerConnectionClient,然后将该文件夹内的一个文件的确切路径作为SCAN_PATH传递,它将扫描该文件夹中包含的所有文件并在内置图库中打开。因此,只需提供文件夹的名称,您将得到其中包括视频在内的所有文件。如果您只想打开图像,请更改FILE_TYPE="image/*"

public class sdActivity extends Activity implements MediaScannerConnectionClient{
    public String[] allFiles;
private String SCAN_PATH ;
private static final String FILE_TYPE = "*/*";

private MediaScannerConnection conn;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    File folder = new File("/sdcard/youfoldername/");
    allFiles = folder.list();
 //   uriAllFiles= new Uri[allFiles.length];
    for(int i=0;i<allFiles.length;i++)
    {
        Log.d("all file path"+i, allFiles[i]+allFiles.length);
    }
  //  Uri uri= Uri.fromFile(new File(Environment.getExternalStorageDirectory().toString()+"/yourfoldername/"+allFiles[0]));
    SCAN_PATH=Environment.getExternalStorageDirectory().toString()+"/yourfoldername/"+allFiles[0];
    Log.d("SCAN PATH", "Scan Path " + SCAN_PATH);
    Button scanBtn = (Button)findViewById(R.id.scanBtn);
    scanBtn.setOnClickListener(new OnClickListener(){
    @Override
    public void onClick(View v) {
        startScan();
    }});
    }
    private void startScan()
    {
    Log.d("Connected","success"+conn);
    if(conn!=null)
    {
    conn.disconnect();
    }
    conn = new MediaScannerConnection(this,this);
    conn.connect();
    }
@Override
public void onMediaScannerConnected() {
    Log.d("onMediaScannerConnected","success"+conn);
    conn.scanFile(SCAN_PATH, FILE_TYPE);    
}
@Override
public void onScanCompleted(String path, Uri uri) {
    try {
        Log.d("onScanCompleted",uri + "success"+conn);
        if (uri != null) 
        {
        Intent intent = new Intent(Intent.ACTION_VIEW);
        intent.setData(uri);
        startActivity(intent);
        }
        } finally 
        {
        conn.disconnect();
        conn = null;
        }
       }
}

1
这是“image / *”,不是带复数形式的“images / *”。除此之外,这是到目前为止针对这个特定问题的最佳解决方案。 - dermatthias
@MattiaLipreri 它将扫描特定文件夹,但要启动扫描,您需要提供属于该文件夹的任何文件的确切位置,我选择第0个位置文件。它将扫描属于该特定文件夹的所有 URI。 - PiyushMishra
适用于我的2.1版本手机,不适用于2.3.3版本,也不适用于三星Galaxy S-III和Galaxy S-II。 - Skynet
如果特定文件夹中还没有图像,则无法正常工作。 - Pedro Lobito
2
这将打开特定的文件,而不是文件夹中的所有文件。 - Muhammad Hamza Shahid
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接