how to display images saved in sdcard folder in android [closed]

Solution 1:

You can get the path of files from a particualr folder as below

Once you get the path of files you ca display the images in gridview

ArrayList<String> f = new ArrayList<String>();// list of file paths
File[] listFile;

public void getFromSdcard()
{
    File file= new File(android.os.Environment.getExternalStorageDirectory(),"TMyFolder");

        if (file.isDirectory())
        {
            listFile = file.listFiles();


            for (int i = 0; i < listFile.length; i++)
            {

                f.add(listFile[i].getAbsolutePath());

            }
        }
}

Remember to add permissionin manifest file

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

By having write permission will have read permission by default.

Example

main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">

<GridView
    android:id="@+id/PhoneImageGrid"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:columnWidth="90dp"
    android:gravity="center"
    android:horizontalSpacing="10dp"
    android:numColumns="auto_fit"
    android:stretchMode="columnWidth"
    android:verticalSpacing="10dp" />

   </RelativeLayout>

gelleryitem.xml

   <?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<ImageView android:id="@+id/thumbImage" android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:layout_centerInParent="true" />
<CheckBox android:id="@+id/itemCheckBox" android:layout_width="wrap_content"
    android:layout_height="wrap_content" android:layout_alignParentRight="true"
    android:layout_alignParentTop="true" />
    </RelativeLayout>

AndroidCustomGalleryActivity.java

   public class AndroidCustomGalleryActivity extends Activity {
private int count;
private Bitmap[] thumbnails;
private boolean[] thumbnailsselection;
private String[] arrPath;
private ImageAdapter imageAdapter;
ArrayList<String> f = new ArrayList<String>();// list of file paths
File[] listFile;


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    getFromSdcard();
    GridView imagegrid = (GridView) findViewById(R.id.PhoneImageGrid);
    imageAdapter = new ImageAdapter();
    imagegrid.setAdapter(imageAdapter);


}
public void getFromSdcard()
{
    File file= new File(android.os.Environment.getExternalStorageDirectory(),"MapleBear");

        if (file.isDirectory())
        {
            listFile = file.listFiles();


            for (int i = 0; i < listFile.length; i++)
            {

                f.add(listFile[i].getAbsolutePath());

            }
        }
}

public class ImageAdapter extends BaseAdapter {
    private LayoutInflater mInflater;

    public ImageAdapter() {
        mInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

    public int getCount() {
        return f.size();
    }

    public Object getItem(int position) {
        return position;
    }

    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            holder = new ViewHolder();
            convertView = mInflater.inflate(
                    R.layout.galleryitem, null);
            holder.imageview = (ImageView) convertView.findViewById(R.id.thumbImage);

            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }


        Bitmap myBitmap = BitmapFactory.decodeFile(f.get(position));
        holder.imageview.setImageBitmap(myBitmap);
        return convertView;
    }
}
class ViewHolder {
    ImageView imageview;


}
    }

Snap shot

enter image description here

Solution 2:

Use Universal Image Loader

https://github.com/nostra13/Android-Universal-Image-Loader.git

Give Image url as your sd card image path.

/**
     *adapter class for view pager
     *
     */
    private class ImagePagerAdapter extends PagerAdapter {
        LayoutInflater inflater;
        public ImagePagerAdapter() {
            inflater=getActivity().getLayoutInflater();
        }

        @Override
        public int getCount() {
            return viewPagerList.size();
        }
        @Override
        public void finishUpdate(View container) {
        }
        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view.equals(object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            View imageLayout = inflater.inflate(R.layout.item_pager_image, container, false);
            ImageView imageView = (ImageView) imageLayout.findViewById(R.id.image);
            final ProgressBar spinner = (ProgressBar) imageLayout.findViewById(R.id.loading);
            String loadURL=null;
            if(connectivityManager.hasDataConnectivity()){
                loadURL=viewPagerList.get(position).getModelImageUrl();
            }
            else {
                String fileName=viewPagerList.get(position).getModelImageUrl();
                fileName = fileName.replace(':', '/');
                fileName = fileName.replace('/', '_');
                loadURL="file://"+Environment.getExternalStorageDirectory()+"/"+folder+"/"+fileName;
            }
            BaseActivity.imageLoader.displayImage(loadURL, imageView, options, new SimpleImageLoadingListener() {
                @Override
                public void onLoadingStarted(String imageUri, View view) {
                    spinner.setVisibility(View.VISIBLE);
                }

                @Override
                public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
                    String message = null;
                    switch (failReason) {
                    case IO_ERROR:
                        message = "Input/Output error";
                        break;
                    case OUT_OF_MEMORY:
                        message = "Out Of Memory error";
                        break;
                    case NETWORK_DENIED:
                        message = "Downloads are denied";
                        break;
                    case UNSUPPORTED_URI_SCHEME:
                        message = "Unsupported URI scheme";
                        break;
                    case UNKNOWN:
                        message = "Unknown error";
                        break;
                    }
                    Toast.makeText(context, message, Toast.LENGTH_SHORT).show();

                    spinner.setVisibility(View.GONE);
                }

                @Override
                public void onLoadingComplete(final String imageUri, View view, final Bitmap loadedImage) {
                    spinner.setVisibility(View.GONE);
                    Logger.show(Log.INFO, "@@@@@@@", imageUri);
                    String uniqueUrlName = imageUri.replace(':', '/');
                    uniqueUrlName = uniqueUrlName.replace('/', '_');

                    File file = new File(Environment.getExternalStorageDirectory()
                            .toString()
                            + "/"
                            + folder
                            + "/"
                            + uniqueUrlName);
                    if(!file.exists()){
                        new Thread(new Runnable() {

                            public void run() {
                                String imageUrlString="file://"+GetModels.getModelURL(imageUri,folder,loadedImage,context);
                                Logger.show(Log.INFO, context.getClass().getName(), "image loaded my folfer"+ imageUrlString);
                            }
                        }).start();
                    }
                    Logger.show(Log.INFO, context.getClass().getName(), "image loaded loader "+ StorageUtils.getCacheDirectory(context));

                }  
            });

            imageView.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {

                    Bundle b=new Bundle();
                    b.putString("ProductName", viewPagerList.get(pos).getModelName());
                    b.putString("ProductPrice", viewPagerList.get(pos).getModelPrice());
                    b.putString("ProductUrl",viewPagerList.get(pos).getModelLink() );
                    String loadURL=null;
                    if(connectivityManager.hasDataConnectivity()){
                        loadURL=viewPagerList.get(pos).getModelImageUrl();
                    }
                    else {
                        String fileName=viewPagerList.get(pos).getModelImageUrl();
                        fileName = fileName.replace(':', '/');
                        fileName = fileName.replace('/', '_');
                        loadURL="file://"+Environment.getExternalStorageDirectory()+"/"
                                +folder+"/"+fileName;
                    }
                    b.putString("ProductImage", loadURL);
                    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
                    FragmentTransaction fragmentTransaction = fragmentManager
                            .beginTransaction();
                    fragmentTransaction.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left,R.anim.slide_in_left, R.anim.slide_out_right);
                    ProductOverview commentFragment = new ProductOverview();
                    commentFragment.setArguments(b);
                    fragmentTransaction.replace(R.id.product_container, commentFragment);
                    fragmentTransaction.addToBackStack(null);
                    fragmentTransaction.commit();

                }
            });
            ((ViewPager) container).addView(imageLayout, 0);
            return imageLayout;
        }

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            ((ViewPager) container).removeView((View) object);
        }
        @Override
        public void restoreState(Parcelable state, ClassLoader loader) {
        }

        @Override
        public Parcelable saveState() {
            return null;
        }

        @Override
        public void startUpdate(View container) {
        }
    }

Solution 3:

it is not possible to display particular folder images using the mediastore method. because every images stored in the mediastore has different unique id to identify it.

but you can do by create your own method to identify what are the images in the particular folder and then get the create thumbnail images.