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 .
- Cómo configurar la altura del ancho de la imagen en función del tamaño de la pantalla en gridview
- Cómo obtener GridView desplazarse a la parte superior con el teclado en Android TV
- Android gridviews altura de la fila max del elemento
- Cómo rellenar gridview con la imagen seleccionada de la galería o capturada desde la cámara
- Android GridView imperfección, cómo eliminar espacio en blanco extra a la derecha
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.
- ¿Cómo manejar ** Grid View ** en el cambio de configuración?
- Añadir espacio a la parte superior e inferior de GridView
- GridView getChildAt () devuelve null
- Calendario Gridview - diapositiva de entrada y salida de animación en el mes cambiado
- Número de rejillas para diferentes dispositivos
- Cómo vaciar una gridview en Android?
- ¿Android consiguiendo la trayectoria a la imagen de la miniatura?
- FooterView para vista de cuadrícula
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
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]);
- Cómo cambiar el estilo de selector de fecha en android?
- Cordova falla en construir en android (dependencia de GCM)