Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/199.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 列出SD卡上的所有图像_Android_Android Sdcard_Android Gridview_Android Gallery - Fatal编程技术网

Android 列出SD卡上的所有图像

Android 列出SD卡上的所有图像,android,android-sdcard,android-gridview,android-gallery,Android,Android Sdcard,Android Gridview,Android Gallery,嗨,我正在开发android Gallery应用程序。我从sd卡中的文件夹中获取图像,并将其显示在网格视图上,如下所示 public static ArrayList<String> getFilePaths(){ ArrayList<String> filePaths = new ArrayList<String>(); File directory = new File(android.os.Environment.getExternalS

嗨,我正在开发android Gallery应用程序。我从sd卡中的文件夹中获取图像,并将其显示在网格视图上,如下所示

public static ArrayList<String> getFilePaths(){
    ArrayList<String> filePaths = new ArrayList<String>();
    File directory = new File(android.os.Environment.getExternalStorageDirectory() 
             + File.separator + AppConstant.PHOTO_ALBUM);

    // check for directory
    if (directory.isDirectory()){
        // getting list of file paths
        File[] listFiles = directory.listFiles();

        // Check for count
        if (listFiles.length > 0) {
            for (int i = 0; i < listFiles.length; i++){

                String filePath = listFiles[i].getAbsolutePath();

                if (IsSupportedFile(filePath)){
                    // Add image path to array list
                    filePaths.add(filePath);
                }
            }
        }else{
            // image directory is empty
            Toast.makeText(_context,
                    AppConstant.PHOTO_ALBUM
                    + " is empty. Please load some images in it !",
                    Toast.LENGTH_LONG).show();
        }

    } 
    return filePaths;
}

//fetching all image paths
 imagePaths = utils.getFilePaths();
 adapter = new GridViewImageAdapter(GridViewActivity.this, imagePaths, columnWidth);
 // setting grid view adapter
 gridView.setAdapter(adapter);
publicstaticarraylistgetfilepath(){
ArrayList filepath=新的ArrayList();
File directory=新文件(android.os.Environment.getExternalStorageDirectory())
+File.separator+AppConstant.PHOTO_相册);
//检查目录
if(directory.isDirectory()){
//获取文件路径列表
File[]listFiles=directory.listFiles();
//清点
如果(listFiles.length>0){
对于(int i=0;i
我想显示SD卡中的所有图像,而不仅仅是在指定的文件夹中。我不知道怎么做


请帮忙。谢谢

使用内容提供商从mediastore.images.Media获取所有图像

public void fetchImageIds(){

    Cursor cursor = getContentResolver()
                        .query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{}, null, null)

    cursor.moveToFirst();
    while (!cursor.isAfterLast()) {
        ids.add(cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID)));
        cursor.moveToNext();

    }
    adapter.notifyDataSetChanged();
}
在gridView的适配器中

@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    ImageView imageView = new ImageView(SeeYourself.this);
    Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(contentResolver, ids.get(position), MediaStore.Images.Thumbnails.MICRO_KIND, null);

    imageView.setImageBitmap(bitmap);

    return imageView;  //To change body of implemented methods use File | Settings | File Templates.
}

使用这种方法。这将返回SD卡中的所有图像路径列表,如果不需要任何指定的图像扩展名,可以将其过滤掉

public ArrayList<String> getFilePaths()
    {


        Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
        String[] projection = {MediaStore.Images.ImageColumns.DATA}; 
        Cursor c = null;
        SortedSet<String> dirList = new TreeSet<String>();
        ArrayList<String> resultIAV = new ArrayList<String>();

         String[] directories = null; 
        if (u != null) 
        { 
            c = managedQuery(u, projection, null, null, null); 
        } 

        if ((c != null) && (c.moveToFirst())) 
        { 
            do 
            {
                String tempDir = c.getString(0);
                tempDir = tempDir.substring(0, tempDir.lastIndexOf("/"));
                try{
                    dirList.add(tempDir);
                }
                catch(Exception e)
                {

                }
            } 
            while (c.moveToNext());
            directories = new String[dirList.size()];
            dirList.toArray(directories);

        }

        for(int i=0;i<dirList.size();i++)
        {
            File imageDir = new File(directories[i]);
            File[] imageList = imageDir.listFiles();
            if(imageList == null)
                continue;
            for (File imagePath : imageList) { 
                try {

                        if(imagePath.isDirectory())
                        {
                            imageList = imagePath.listFiles();

                        }
                        if ( imagePath.getName().contains(".jpg")|| imagePath.getName().contains(".JPG")  
                                || imagePath.getName().contains(".jpeg")|| imagePath.getName().contains(".JPEG")                                    
                                || imagePath.getName().contains(".png") || imagePath.getName().contains(".PNG")
                                || imagePath.getName().contains(".gif") || imagePath.getName().contains(".GIF")
                                || imagePath.getName().contains(".bmp") || imagePath.getName().contains(".BMP")                         
        )
                        {



                            String path= imagePath.getAbsolutePath();
                        resultIAV.add(path);

                        }
                    }
            //  }
            catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        return resultIAV;


    }
public ArrayList getfilepath()
{
uriu=MediaStore.Images.Media.EXTERNAL\u CONTENT\u Uri;
String[]projection={MediaStore.Images.ImageColumns.DATA};
光标c=null;
SortedSet dirList=新树集();
ArrayList resultIAV=新的ArrayList();
字符串[]目录=null;
如果(u!=null)
{ 
c=managedQuery(u,投影,null,null,null);
} 
if((c!=null)&(c.moveToFirst())
{ 
做
{
String tempDir=c.getString(0);
tempDir=tempDir.substring(0,tempDir.lastIndexOf(“/”);
试一试{
dirList.add(tempDir);
}
捕获(例外e)
{
}
} 
而(c.moveToNext());
目录=新字符串[dirList.size()];
dirList.toArray(目录);
}
对于(int i=0;i
/**
*获取所有图像路径
* 
*@param活动
*@return ArrayList带有图像路径
*/
公共静态数组列表getAllShownImagesPath(活动){
Uri;
光标;
int列_索引;
字符串标记器st1;
ArrayList listOfAllImages=新的ArrayList();
字符串AbsolutePathFimage=null;
uri=android.provider.MediaStore.Images.Media.EXTERNAL\u CONTENT\u uri;
字符串[]投影={MediaColumns.DATA};
cursor=activity.getContentResolver().query(uri、投影、null、,
空,空);
column_index=cursor.getColumnIndexOrThrow(MediaColumns.DATA);
while(cursor.moveToNext()){
AbsolutePathFimage=cursor.getString(列索引);
添加(绝对病理图像);
}
返回所有图像的列表;
}
这对我很有用

 private void load_image_files(File dir) {

    String extention = ".jpg";
    File[] listFile = dir.listFiles();
    if (listFile != null) {
        for (int i = 0; i < listFile.length; i++) {

            if (listFile[i].isDirectory()) {
                load_image_files(listFile[i]);
            } else {
                if (listFile[i].getName().endsWith(extention)) {
                    name_list.add(listFile[i].getName());
                    name_path_list.add(listFile[i].getAbsolutePath());

                }
            }
        }
    }
}
private void加载图像文件(文件目录){
字符串扩展=“.jpg”;
File[]listFile=dir.listFiles();
if(listFile!=null){
for(int i=0;i
使用它返回来自内部和外部存储卡的图像列表

    public static ArrayList<ImageDataModel> allImages = new ArrayList<ImageDataModel>();
结果:

如果您仍然面临问题,Github上提供完整的代码

    public static ArrayList<ImageDataModel> allImages = new ArrayList<ImageDataModel>();

您只能使用URI而不是文件路径。从SD卡获取图像是更好的方法。如果它有助于切换到
file directory=Environment.getExternalStorageDirectory();
,请检查此选项。我想这应该可以。
  /**
         * Getting All Images Path.
         *
         * @param activity
         *            the activity
         * @return ArrayList with images Path
         */
            public static ArrayList<ImageDataModel> gettAllImages(Activity activity) {

              //Remove older images to avoid copying same image twice

                allImages.clear();
                Uri uri;
                Cursor cursor;
                int column_index_data, column_index_folder_name;

                String absolutePathOfImage = null, imageName;

            //get all images from external storage

            uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

            String[] projection = { MediaColumns.DATA,
                    MediaStore.Images.Media.DISPLAY_NAME };

            cursor = activity.getContentResolver().query(uri, projection, null,
                    null, null);

            column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA);

            column_index_folder_name = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);

            while (cursor.moveToNext()) {

                absolutePathOfImage = cursor.getString(column_index_data);

                imageName = cursor.getString(column_index_folder_name);

                allImages.add(new ImageDataModel(imageName, absolutePathOfImage));

            }

            // Get all Internal storage images

            uri = android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI;

            cursor = activity.getContentResolver().query(uri, projection, null,
                    null, null);

            column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA);

            column_index_folder_name = cursor
                    .getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);

            while (cursor.moveToNext()) {

                absolutePathOfImage = cursor.getString(column_index_data);

                imageName = cursor.getString(column_index_folder_name);

                allImages.add(new ImageDataModel(imageName, absolutePathOfImage));
            }

            return allImages;
        }

    }
public class ImageDataModel {

    private String imageTitle , imagePath;

    /**
     * @return the imageTitle
     */
    public String getImageTitle() {
        return imageTitle;
    }

    /**
     * @param imageTitle the imageTitle to set
     */
    public void setImageTitle(String imageTitle) {
        this.imageTitle = imageTitle;
    }

    /**
     * @return the imagePath
     */
    public String getImagePath() {
        return imagePath;
    }

    /**
     * @param imagePath the imagePath to set
     */
    public void setImagePath(String imagePath) {
        this.imagePath = imagePath;
    }

    public ImageDataModel(String imageTitle, String imagePath) {
        super();
        this.imageTitle = imageTitle;
        this.imagePath = imagePath;
    }

}