我们如何使用MediaStore类(ANDROID)获取包含图像的所有文件夹?

时间:2016-04-07 11:41:14

标签: java android android-contentprovider file-manager

我使用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类型的ArrayLists。

    @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;
    }
}

上面是扩展BaseAdapter类的myCustomAdapter类。

1 个答案:

答案 0 :(得分:0)

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};