Android 列出SD卡上的所有图像
嗨,我正在开发android Gallery应用程序。我从sd卡中的文件夹中获取图像,并将其显示在网格视图上,如下所示Android 列出SD卡上的所有图像,android,android-sdcard,android-gridview,android-gallery,Android,Android Sdcard,Android Gridview,Android Gallery,嗨,我正在开发android Gallery应用程序。我从sd卡中的文件夹中获取图像,并将其显示在网格视图上,如下所示 public static ArrayList<String> getFilePaths(){ ArrayList<String> filePaths = new ArrayList<String>(); File directory = new File(android.os.Environment.getExternalS
public static ArrayList<String> getFilePaths(){
ArrayList<String> filePaths = new ArrayList<String>();
File directory = new File(android.os.Environment.getExternalStorageDirectory()
+ File.separator + AppConstant.PHOTO_ALBUM);
// check for directory
if (directory.isDirectory()){
// getting list of file paths
File[] listFiles = directory.listFiles();
// Check for count
if (listFiles.length > 0) {
for (int i = 0; i < listFiles.length; i++){
String filePath = listFiles[i].getAbsolutePath();
if (IsSupportedFile(filePath)){
// Add image path to array list
filePaths.add(filePath);
}
}
}else{
// image directory is empty
Toast.makeText(_context,
AppConstant.PHOTO_ALBUM
+ " is empty. Please load some images in it !",
Toast.LENGTH_LONG).show();
}
}
return filePaths;
}
//fetching all image paths
imagePaths = utils.getFilePaths();
adapter = new GridViewImageAdapter(GridViewActivity.this, imagePaths, columnWidth);
// setting grid view adapter
gridView.setAdapter(adapter);
publicstaticarraylistgetfilepath(){
ArrayList filepath=新的ArrayList();
File directory=新文件(android.os.Environment.getExternalStorageDirectory())
+File.separator+AppConstant.PHOTO_相册);
//检查目录
if(directory.isDirectory()){
//获取文件路径列表
File[]listFiles=directory.listFiles();
//清点
如果(listFiles.length>0){
对于(int i=0;i
我想显示SD卡中的所有图像,而不仅仅是在指定的文件夹中。我不知道怎么做
请帮忙。谢谢 使用内容提供商从mediastore.images.Media获取所有图像
public void fetchImageIds(){
Cursor cursor = getContentResolver()
.query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{}, null, null)
cursor.moveToFirst();
while (!cursor.isAfterLast()) {
ids.add(cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID)));
cursor.moveToNext();
}
adapter.notifyDataSetChanged();
}
在gridView的适配器中
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ImageView imageView = new ImageView(SeeYourself.this);
Bitmap bitmap = MediaStore.Images.Thumbnails.getThumbnail(contentResolver, ids.get(position), MediaStore.Images.Thumbnails.MICRO_KIND, null);
imageView.setImageBitmap(bitmap);
return imageView; //To change body of implemented methods use File | Settings | File Templates.
}
使用这种方法。这将返回SD卡中的所有图像路径列表,如果不需要任何指定的图像扩展名,可以将其过滤掉
public ArrayList<String> getFilePaths()
{
Uri u = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = {MediaStore.Images.ImageColumns.DATA};
Cursor c = null;
SortedSet<String> dirList = new TreeSet<String>();
ArrayList<String> resultIAV = new ArrayList<String>();
String[] directories = null;
if (u != null)
{
c = managedQuery(u, projection, null, null, null);
}
if ((c != null) && (c.moveToFirst()))
{
do
{
String tempDir = c.getString(0);
tempDir = tempDir.substring(0, tempDir.lastIndexOf("/"));
try{
dirList.add(tempDir);
}
catch(Exception e)
{
}
}
while (c.moveToNext());
directories = new String[dirList.size()];
dirList.toArray(directories);
}
for(int i=0;i<dirList.size();i++)
{
File imageDir = new File(directories[i]);
File[] imageList = imageDir.listFiles();
if(imageList == null)
continue;
for (File imagePath : imageList) {
try {
if(imagePath.isDirectory())
{
imageList = imagePath.listFiles();
}
if ( imagePath.getName().contains(".jpg")|| imagePath.getName().contains(".JPG")
|| imagePath.getName().contains(".jpeg")|| imagePath.getName().contains(".JPEG")
|| imagePath.getName().contains(".png") || imagePath.getName().contains(".PNG")
|| imagePath.getName().contains(".gif") || imagePath.getName().contains(".GIF")
|| imagePath.getName().contains(".bmp") || imagePath.getName().contains(".BMP")
)
{
String path= imagePath.getAbsolutePath();
resultIAV.add(path);
}
}
// }
catch (Exception e) {
e.printStackTrace();
}
}
}
return resultIAV;
}
public ArrayList getfilepath()
{
uriu=MediaStore.Images.Media.EXTERNAL\u CONTENT\u Uri;
String[]projection={MediaStore.Images.ImageColumns.DATA};
光标c=null;
SortedSet dirList=新树集();
ArrayList resultIAV=新的ArrayList();
字符串[]目录=null;
如果(u!=null)
{
c=managedQuery(u,投影,null,null,null);
}
if((c!=null)&(c.moveToFirst())
{
做
{
String tempDir=c.getString(0);
tempDir=tempDir.substring(0,tempDir.lastIndexOf(“/”);
试一试{
dirList.add(tempDir);
}
捕获(例外e)
{
}
}
而(c.moveToNext());
目录=新字符串[dirList.size()];
dirList.toArray(目录);
}
对于(int i=0;i/**
*获取所有图像路径
*
*@param活动
*@return ArrayList带有图像路径
*/
公共静态数组列表getAllShownImagesPath(活动){
Uri;
光标;
int列_索引;
字符串标记器st1;
ArrayList listOfAllImages=新的ArrayList();
字符串AbsolutePathFimage=null;
uri=android.provider.MediaStore.Images.Media.EXTERNAL\u CONTENT\u uri;
字符串[]投影={MediaColumns.DATA};
cursor=activity.getContentResolver().query(uri、投影、null、,
空,空);
column_index=cursor.getColumnIndexOrThrow(MediaColumns.DATA);
while(cursor.moveToNext()){
AbsolutePathFimage=cursor.getString(列索引);
添加(绝对病理图像);
}
返回所有图像的列表;
}
这对我很有用
private void load_image_files(File dir) {
String extention = ".jpg";
File[] listFile = dir.listFiles();
if (listFile != null) {
for (int i = 0; i < listFile.length; i++) {
if (listFile[i].isDirectory()) {
load_image_files(listFile[i]);
} else {
if (listFile[i].getName().endsWith(extention)) {
name_list.add(listFile[i].getName());
name_path_list.add(listFile[i].getAbsolutePath());
}
}
}
}
}
private void加载图像文件(文件目录){
字符串扩展=“.jpg”;
File[]listFile=dir.listFiles();
if(listFile!=null){
for(int i=0;i
使用它返回来自内部和外部存储卡的图像列表
public static ArrayList<ImageDataModel> allImages = new ArrayList<ImageDataModel>();
结果:
如果您仍然面临问题,Github上提供完整的代码
public static ArrayList<ImageDataModel> allImages = new ArrayList<ImageDataModel>();
您只能使用URI而不是文件路径。从SD卡获取图像是更好的方法。如果它有助于切换到file directory=Environment.getExternalStorageDirectory();
,请检查此选项。我想这应该可以。
/**
* Getting All Images Path.
*
* @param activity
* the activity
* @return ArrayList with images Path
*/
public static ArrayList<ImageDataModel> gettAllImages(Activity activity) {
//Remove older images to avoid copying same image twice
allImages.clear();
Uri uri;
Cursor cursor;
int column_index_data, column_index_folder_name;
String absolutePathOfImage = null, imageName;
//get all images from external storage
uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String[] projection = { MediaColumns.DATA,
MediaStore.Images.Media.DISPLAY_NAME };
cursor = activity.getContentResolver().query(uri, projection, null,
null, null);
column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
column_index_folder_name = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
imageName = cursor.getString(column_index_folder_name);
allImages.add(new ImageDataModel(imageName, absolutePathOfImage));
}
// Get all Internal storage images
uri = android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI;
cursor = activity.getContentResolver().query(uri, projection, null,
null, null);
column_index_data = cursor.getColumnIndexOrThrow(MediaColumns.DATA);
column_index_folder_name = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);
while (cursor.moveToNext()) {
absolutePathOfImage = cursor.getString(column_index_data);
imageName = cursor.getString(column_index_folder_name);
allImages.add(new ImageDataModel(imageName, absolutePathOfImage));
}
return allImages;
}
}
public class ImageDataModel {
private String imageTitle , imagePath;
/**
* @return the imageTitle
*/
public String getImageTitle() {
return imageTitle;
}
/**
* @param imageTitle the imageTitle to set
*/
public void setImageTitle(String imageTitle) {
this.imageTitle = imageTitle;
}
/**
* @return the imagePath
*/
public String getImagePath() {
return imagePath;
}
/**
* @param imagePath the imagePath to set
*/
public void setImagePath(String imagePath) {
this.imagePath = imagePath;
}
public ImageDataModel(String imageTitle, String imagePath) {
super();
this.imageTitle = imageTitle;
this.imagePath = imagePath;
}
}