如何使用安卓默认相册打开特定文件夹的图片

3
我希望在我的程序中使用默认的Android图库应用程序打开特定文件夹的图像。我使用了Piyush Mishra在一篇帖子中提供的代码,但我在代码下面写出了以下问题。
public class GalleryActivity extends Activity implements MediaScannerConnectionClient{
    /** Called when the activity is first created. */
     public String[] allFiles;
     private String SCAN_PATH ;
     private static final String FILE_TYPE = "images/*";

     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/images/");
         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()+"/images/"+allFiles[0];
         Log.e("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.toString() + "success"+conn);
             if (uri != null)                
             {

             Intent intent = new Intent(Intent.ACTION_DEFAULT);
             intent.setData(uri);
             startActivity(intent);
             }
             } finally 

             {
             conn.disconnect();
             conn = null;
             }


}
 }

但是这段代码也会显示设备上的其他图片。

1
在使用之前,您需要向系统发送广播以更新图库,否则您将无法成功。我尝试了这段代码,它运行得非常好。 - PiyushMishra
3个回答

1
我有同样的问题,我想将画廊启动到一个特定的视频和图片文件夹中。但是我总是遇到ActivityNotFoundException的错误。根据其他帖子,我可以启动画廊,但不能进入特定的文件夹,也不能同时启动视频和图像。这个问题让我很困扰。我一直在尝试实现缩略图网格视图,这可能是一个选择。但为什么要费力地创建、线程化和缓存缩略图,当画廊应用程序可以做到这一点呢?
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);

intent.setData(uri);
intent.setType("image/*");

startActivityForResult(intent, 0);

始终使用setDataAndType而不是分开使用data和type,因为每个都会使另一个失效。 - JacksOnF1re

0

我觉得这个会有帮助 带文件夹过滤器的图库

即使我尝试了很多次,也没有成功找到解决方法。我搜索了很多次,但都没有用。


我也尝试了相同的代码,如你所见,但它显示了其他的图片,可能是我做错了。如果你找到正确的方法,请回复。 - Piyush
你好,弗兰肯斯坦,有没有什么运气了? - Piyush
不用啦,我只是不需要那个功能而已,所以没加进去。但是我试过很多次,所以我先回答说没有可能的方法,但你可以继续尝试,因为我的话并不是最终决定。你有必要使用默认意图吗?因为你可以在视图中显示特定文件夹的图片,你可以使用MediaStore获取它们并在GridView中展示,但对于默认视图我不清楚。 - MKJParekh
阿鱼建议在显示图像时对抗内存不足错误的方法。 - Piyush
是的,当你获取图像并将它们存储到位图数组/列表中时,在存储之前,将它们缩放为50X50的小尺寸。可以使用BitmapFactory.createScaledBitmap()方法来实现。 - MKJParekh
显示剩余5条评论

0
在使用此功能更新图库之前,请发送广播。只需复制粘贴即可。
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file:/+ Environment.getExternalStorageDirectory())));

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