在我的应用程序中,我创建了GridView
以显示特定文件夹中的图像。
问题是我想从DCIM / 100ANDRO文件夹中检索图像。
应该通过查询传递哪种类型的参数来检索此类图像?
请给我解决方案。
我正在使用以下代码进行检索,该代码为我提供了相机拍摄的图像
//importing only camera images and storing in ArrayList of class Images type
String[] projection = {
MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Media.DISPLAY_NAME
};
String selection = MediaStore.Images.Media.BUCKET_DISPLAY_NAME + " = ?";
String[] selectionArgs = new String[] {
"Camera"
};
Cursor mImageCursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, null );
if (mImageCursor != null)
{
mImageCursor.moveToFirst();
for (int i = 0; i < mImageCursor.getCount(); i++)
{
Images im=new Images();
eachImageView=new ImageView(this);
int imageId = mImageCursor.getInt((mImageCursor.getColumnIndex( MediaStore.Images.Media._ID)));
Bitmap bm = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(),
imageId, MediaStore.Images.Thumbnails.MINI_KIND, null);
im.setBitmap(bm);
eachImageView.setImageBitmap(bm);
im.setImageView(eachImageView);
arrayOfImages.add(im);
mImageCursor.moveToNext();
}
}
建议将不胜感激!
答案 0 :(得分:5)
File folder = new File(Environment.getExternalStorageDirectory().toString() + "/Folder Name/");
folder.mkdirs();
File[] allFiles = folder.listFiles(new FilenameFilter() {
public boolean accept(File dir, String name) {
return (name.endsWith(".jpg") || name.endsWith(".jpeg") || name.endsWith(".png"));
}
});
答案 1 :(得分:3)
首先,断言您正在访问的路径,然后使用 Bitmap.DecodePath(路径)来加载位图。 试试这个。
File path = new File(Environment.getExternalStorageDirectory(),"DCIM/100ANDRO");
if(path.exists())
{
String[] fileNames = path.list();
}
for(int i = 0; i < filename.length; i++)
{
Bitmap mBitmap = Bitmap.decodeFile(path.getPath()+"/"+ fileNames[i]);
///Now set this bitmap on imageview
}
答案 2 :(得分:1)
检查一下
File sdcardPath = new File(Environment.getExternalStorageDirectory()
.getPath() + "/100ANDRO");
Log.v(sdcardPath.getPath());
检查是否打印出所需的正确路径 如果sdcardPath不为null,则尝试以下逻辑
int imageCount = sdcardPath.listFiles().length;
for (int count = 0; count < imageCount - 1; count++) {
ImageView eachImageView= new ImageView(this);
Bitmap bmp = BitmapFactory.decodeFile(sdcardPath.listFiles()[count].getAbsolutePath());
eachImageView.setImageBitmap(bmp);
答案 3 :(得分:1)
如果我理解正确,您希望GridView显示设备上某个文件夹中的图像。
在您的查询中,您使用以下Uri:MediaStore.Images.Media.EXTERNAL_CONTENT_URI
。这将在“主要”外部存储器上的任何位置搜索图像。如果您只想搜索特定文件夹 - 请使用特定的Uri。
您可以使用您所在位置的路径创建File
对象,然后从该文件创建一个Uri。例如:
File myFile = new File("/scard/myfolder");
Uri myUri = Uri.fromFile(myFile);
然后在查询图像时,您可以使用此Uri。也就是说你会:
Cursor mImageCursor = getContentResolver().query(myUri, projection, selection, selectionArgs, null );
然后您仍然可以以相同的方式处理返回的光标,因为数据的格式是相同的。但是,返回的数据只包含所需文件夹中的图像。
希望这会有所帮助:)