As i am working on displaying images saved in sdcard folder, I found the following link.
Displaying images in gridview from SDCard.
I am using the following code to get images from specified folder in sdcard,but here i am getting 0 count.
MyCode.jav
String[] projection = {MediaStore.Images.Media._ID};
final String[] columns = { MediaStore.Images.Media.DATA,MediaStore.Images.Media._ID };
final String orderBy = MediaStore.Images.Media._ID;
Cursor imagecursor = managedQuery( MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
projection,
MediaStore.Images.Media.DATA + " like ? ",
new String[] {"/my_images"},
null);
int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
this.count = imagecursor.getCount();
this.thumbnails = new Bitmap[this.count];
this.arrPath = new String[this.count];
this.thumbnailsselection = new boolean[this.count];
for (int i = 0; i < this.count; i++) {
imagecursor.moveToPosition(i);
int id = imagecursor.getInt(image_column_index);
int dataColumnIndex = imagecursor
.getColumnIndex(MediaStore.Images.Media.DATA);
thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(
getApplicationContext().getContentResolver(), id,
MediaStore.Images.Thumbnails.MICRO_KIND, null);
arrPath[i] = imagecursor.getString(dataColumnIndex);
}
imageAdapter = new ImageAdapter();
secure_gallery_grid.setAdapter(imageAdapter);
imagecursor.close();
But here as per the following link all the images saved in sd card are displaying. But here i want to display images which are saved in particular folder, as like i created "My_images" folder & saved images in that folder. I want to display images from that folder & need to display in gridview as per link.
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
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) {
}
}
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.
Here I am posting code to retrieve file names from "particular directory". You need to do some other task your self.
File imgDir = new File(Environment.getExternalStorageDirectory()+ File.separator + "directory");
if (!imgDir.exists())
imgDir.mkdir();
String files[] = imgDir.list();
Now check whether "files[]" is null or not.
if (files == null)
// no files
else{
count = files.length;
//do something
}
You have list of files with their path, fetch out bitmap from them and display in grid.
NoTe:
To print full path use following code.
imgDir.getAbsolutePath() + File.separator + files[i]);