【问题标题】:Built-in gallery in specific folder [duplicate]特定文件夹中的内置画廊[重复]
【发布时间】:2011-05-20 15:37:31
【问题描述】:

可能重复:
Gallery with folder filter

我正在使用以下代码在我的应用中打开一个图库

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

我需要使用内置图库应用程序来显示特定文件夹中的图像/视频列表。 - 打开图库时有一些 Intent 操作来显示所选图像??? - 有没有办法确定特定的图像文件夹?**我希望画廊只显示我文件夹中的图像/视频(而不是其他系统文件夹)。

【问题讨论】:

  • 这里已经讨论过完整的解决方案 - stackoverflow.com/questions/2169649/…
  • @peter_budo:首先请看看两个问题之间的区别,我搜索了很多,这个问题是有效的,因为你上面建议的网址不是他问的答案......
  • @PiyushMishra 原创者甚至懒得回来解释他想要什么,所以你怎么能确定海报想要什么。你也许是读心者。在你旁边碰到了 6 个月大的帖子,没有有效信息
  • @peter_budo 世界上没有人是读心者,我试图提出一些主持人试图尽快结束问题的事情,即使答案不相关,也只需给他们一个链接对于这个问题,所以这是我对所有版主的谦卑要求,首先请从用户的角度看问题,他/她想问什么。我并不是说你通过链接做错了什么,但链接与用户的要求没有太大关系..
  • @peter_budo:您提供的链接,您是否测试过任何代码,没有人告诉如何在内置画廊中打开一个确切的文件夹,除了试图这样做的安东尼,但该代码再次对您不起作用可以看到,我认为用户的评论和时间对我们双方同样重要。

标签: android


【解决方案1】:

您只需要在您的活动中实现 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;
        }
       }
}

【讨论】:

  • 它是“image/*”,而不是带有复数 s 的“images/*”。除此之外,这是解决这个特定问题的最佳解决方案。
  • @dermatthias 很高兴它对您有所帮助,感谢您的更正会更新它。
  • 为什么我只能显示 allFiles[0] 指向的图像而不是同一目录中存在的所有图像?
  • @MattiaLipreri 它将扫描特定文件夹,但要开始扫描,您需要提供属于我选择第 0 个位置文件的文件夹的任何文件的确切位置。它将扫描整个 uri 属于那个特定的文件夹。
  • 这会打开特定文件而不是文件夹中的所有文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多