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, he encontrado el siguiente enlace.

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

Estoy utilizando el siguiente código para obtener imágenes de la carpeta especificada en sdcard, pero aquí estoy recibiendo 0 cuenta.

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 por el siguiente enlace todas las imágenes guardadas en la tarjeta SD se muestran. Pero aquí quiero mostrar imágenes que se guardan en la carpeta en particular, al igual que i creado "My_images" carpeta y las imágenes guardadas en esa carpeta. Quiero mostrar imágenes de esa carpeta y necesito mostrar en gridview como por enlace.

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

Una vez que usted consigue la trayectoria de los archivos usted ca exhibe las imágenes en 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()); } } } 

Recuerde agregar el archivo de permiso en el manifiesto

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

Tener permiso de escritura tendrá permiso de lectura de forma predeterminada.

Ejemplo

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; } } 

Instantánea

Introduzca aquí la descripción de la imagen

Utilizar Universal Image Loader

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

Dar URL de imagen como su ruta de imagen de 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 restoreState(Parcelable state, ClassLoader loader) { } @Override public Parcelable saveState() { return null; } @Override public void startUpdate(View container) { } } 

No es posible mostrar imágenes de carpetas en particular utilizando el método mediastore. Porque todas las imágenes almacenadas en el mediastore tienen identificador único diferente para identificarlo.

Pero usted puede hacer por crear su propio método para identificar cuáles son las imágenes en la carpeta particular y entonces conseguir las imágenes de la miniatura de la creación.

Aquí estoy publicando código para recuperar nombres de archivo de "directorio particular". Usted necesita hacer otra tarea su auto.

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

Ahora compruebe si "files []" es nulo o no.

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

Usted tiene lista de archivos con su ruta de acceso, extraer mapa de bits de ellos y mostrar en la cuadrícula.

Nota:

Para imprimir la ruta completa, siga el siguiente código.

 imgDir.getAbsolutePath() + File.separator + files[i]); 
  • Espacios entre elementos de un GridView
  • Cómo forzar a GridView a generar celdas cuadradas en Android
  • Android cómo cambiar el color de resaltado de gridview?
  • Android GridView Elemento seleccionado Fondo
  • Navegación por teclado con Android GridView no se desplaza por la cuadrícula
  • Androide ¿Cómo estirar las filas en el gridview para llenar la pantalla?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.