我们如何使用 MediaStore class (ANDROID) 获取所有包含图像的文件夹?
How do we get all folders containing images using MediaStore class (ANDROID)?
我已经使用 MediaStore Class 获取存储中的所有图像文件夹。
但问题是它显示同一个文件夹的次数与其中图像的数量一样多。
public void getImageDirProvider(){
Uri uri= MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID,MediaStore.Images.Media._ID};
imageCursor=getActivity().getContentResolver().query(uri,projection,null,null,null);
if (imageCursor!=null){
while(imageCursor.moveToNext()){
bucketName.add(imageCursor.getString(0));
bucketId.add(imageCursor.getString(1));
}
}
}
这里的bucketName和bucketId是String类型的ArrayList。
@Override
public int getCount() {
return bucketName.size();
}
@Override
public Object getItem(int position) {
return bucketName.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
class Holder {
ImageView iview;
TextView tview;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder hold = new Holder();
convertView = layoutInflater.inflate(R.layout.my_list_adapter, parent, false);
hold.tview = (TextView) convertView.findViewById(R.id.text_view_adapter);
hold.iview = (ImageView) convertView.findViewById(R.id.image_view);
hold.tview.setText(getItem(position).toString());
hold.iview.setImageResource(android.R.drawable.ic_btn_speak_now);
return convertView;
}
}
上面是 myCustomAdapter class 扩展 BaseAdapter class.
String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID,MediaStore.Images.Media._ID};
您查询每个可用的图像,因此返回的游标有尽可能多的记录。所以当你在它上面循环时,你当然会收到重复的桶。
尝试从查询中排除图像并仅查询可用的存储桶,例如
String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID};
如果您仍然收到重复值,请尝试
String projection[] = {"DISTINCT " + MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.BUCKET_ID};
我已经使用 MediaStore Class 获取存储中的所有图像文件夹。 但问题是它显示同一个文件夹的次数与其中图像的数量一样多。
public void getImageDirProvider(){
Uri uri= MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID,MediaStore.Images.Media._ID};
imageCursor=getActivity().getContentResolver().query(uri,projection,null,null,null);
if (imageCursor!=null){
while(imageCursor.moveToNext()){
bucketName.add(imageCursor.getString(0));
bucketId.add(imageCursor.getString(1));
}
}
}
这里的bucketName和bucketId是String类型的ArrayList。
@Override
public int getCount() {
return bucketName.size();
}
@Override
public Object getItem(int position) {
return bucketName.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
class Holder {
ImageView iview;
TextView tview;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
Holder hold = new Holder();
convertView = layoutInflater.inflate(R.layout.my_list_adapter, parent, false);
hold.tview = (TextView) convertView.findViewById(R.id.text_view_adapter);
hold.iview = (ImageView) convertView.findViewById(R.id.image_view);
hold.tview.setText(getItem(position).toString());
hold.iview.setImageResource(android.R.drawable.ic_btn_speak_now);
return convertView;
}
}
上面是 myCustomAdapter class 扩展 BaseAdapter class.
String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID,MediaStore.Images.Media._ID};
您查询每个可用的图像,因此返回的游标有尽可能多的记录。所以当你在它上面循环时,你当然会收到重复的桶。 尝试从查询中排除图像并仅查询可用的存储桶,例如
String projection[]={MediaStore.Images.Media.BUCKET_DISPLAY_NAME,MediaStore.Images.Media.BUCKET_ID};
如果您仍然收到重复值,请尝试
String projection[] = {"DISTINCT " + MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.BUCKET_ID};