cómo mostrar las imágenes guardadas en la carpeta sdcard en Android

Como estoy trabajando en la visualización de imágenes guardadas en la carpeta sdcard, encontré el siguiente enlace.

Visualización de imágenes en gridview desde SDCard .

Estoy usando el siguiente código para obtener imágenes de la carpeta especificada en sdcard, pero aquí obtengo 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(); 

Pero aquí, como en el siguiente enlace, se muestran todas las imágenes guardadas en la tarjeta sd. Pero aquí quiero mostrar las imágenes que se guardan en una carpeta en particular, como cuando creé la carpeta “My_images” y las imágenes guardadas en esa carpeta. Quiero mostrar imágenes de esa carpeta y necesito mostrarlas en gridview según el enlace.

Puede obtener la ruta de los archivos desde una carpeta particular como se muestra a continuación

Una vez que obtenga la ruta de los archivos puede mostrar las imágenes en gridview

 ArrayList f = new ArrayList();// 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()); } } } 

Recuerde agregar permisos en el archivo de manifiesto

  

Al tener permiso de escritura tendrá permiso de lectura por defecto.

Ejemplo

main.xml

      

gelleryitem.xml

       

AndroidCustomGalleryActivity.java

  public class AndroidCustomGalleryActivity extends Activity { private int count; private Bitmap[] thumbnails; private boolean[] thumbnailsselection; private String[] arrPath; private ImageAdapter imageAdapter; ArrayList f = new ArrayList();// 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; } } 

Disparo rápido

enter image description here

Use Universal Image Loader

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

Dale a la url de la imagen la ruta de la imagen de tu tarjeta sd.

 /** *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 restreState(Parcelable state, ClassLoader loader) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View container) { } } 

no es posible mostrar imágenes de carpetas particulares con el método de mediastore. porque cada imagen almacenada en mediastore tiene una identificación única diferente para identificarla.

pero puede hacerlo creando su propio método para identificar cuáles son las imágenes en la carpeta particular y luego obtener las imágenes en miniatura creadas.

Aquí estoy publicando código para recuperar nombres de archivo de “directorio particular”. Necesitas hacer otra tarea tú mismo.

 File imgDir = new File(Environment.getExternalStorageDirectory()+ File.separator + "directory"); if (!imgDir.exists()) imgDir.mkdir(); String files[] = imgDir.list(); 

Ahora compruebe si “archivos []” es nulo o no.

 if (files == null) // no files else{ count = files.length; //do something } 

Tiene una lista de archivos con su ruta, saca de ellos mapas de bits y los muestra en la cuadrícula.

Nota:

Para imprimir la ruta completa use el siguiente código.

 imgDir.getAbsolutePath() + File.separator + files[i]);