Как отображать изображения, сохраненные в папке sdcard в android

Когда я работаю над отображением изображений, сохраненных в папке sdcard, я нашел следующую ссылку.

Отображение изображений в gridview с SDCard .

Я использую следующий код для получения изображений из указанной папки в sdcard, но здесь я получаю 0 счет.

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(); 

Но здесь, по следующей ссылке, отображаются все изображения, сохраненные на SD-карте. Но здесь я хочу отображать изображения, которые сохраняются в конкретной папке, так же, как я создал папку «My_images» и сохраненные изображения в этой папке. Я хочу отображать изображения из этой папки и должен отображаться в gridview по ссылке.

Вы можете получить путь к файлам из папки particualr, как показано ниже.

Как только вы получите путь к файлам, вы можете отображать изображения в 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()); } } } 

Не забудьте добавить файл разрешений в манифест

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

По умолчанию разрешение на запись будет иметь разрешение на чтение.

пример

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

Введите описание изображения здесь

Используйте универсальный загрузчик изображений

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

Укажите URL-адрес изображения в качестве пути к вашей 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) { } } 

Невозможно отобразить изображения отдельных папок с помощью метода медиастара. Потому что все изображения, хранящиеся в медиастаре, имеют уникальный уникальный идентификатор, чтобы идентифицировать его.

Но вы можете сделать, создав свой собственный метод, чтобы определить, каковы изображения в конкретной папке, а затем получить созданные миниатюры.

Здесь я отправляю код для получения имен файлов из «определенного каталога». Вам нужно выполнить какую-то другую задачу самостоятельно.

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

Теперь проверьте, имеет ли значение «файлы []» значение null или нет.

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

У вас есть список файлов с их путем, извлечение из них растровых изображений и отображение в сетке.

Заметка:

Чтобы напечатать полный путь, используйте следующий код.

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