【问题标题】:Android: Filter gallery results (date range)Android:过滤图库结果(日期范围)
【发布时间】:2013-08-21 13:11:46
【问题描述】:

我想让用户从手机的图库中选择一些图像,然后将它们加载到应用程序中。使用 Intent.ACTION_PICK 和 startActivityForResult(intent, SELECT_PHOTO) 似乎是一项简单的任务。

但是,我需要按日期范围过滤图库中的结果。我需要设置一个初始日期和一个结束日期,并且只有在这两个日期之间拍摄的照片应该显示(或可选择)。有谁知道如何实现这一目标?无论如何,我似乎无法过滤图库结果。

谢谢!

【问题讨论】:

    标签: android image android-intent filter gallery


    【解决方案1】:

    我也遇到了这个任务,经过几个小时的尝试终于解决了:)。 您需要使用媒体存储并查询它从日期和日期传递的时间,它返回一个位图数组下面是对我有用的代码。

    final String[] columns = { MediaStore.Images.Media.DATA,
                    MediaStore.Images.Media._ID,
                    MediaStore.Images.Media.DATE_TAKEN,
                    MediaStore.Images.Media.DATE_ADDED };
    final String orderBy = MediaStore.Images.Media._ID;
    Cursor imagecursor = managedQuery(
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns,
                MediaStore.Images.Media.DATE_TAKEN + ">? and "
                    + MediaStore.Images.Media.DATE_TAKEN + "<?",
                    new String[] { "" + from, "" + to }, orderBy + " DESC");
    int image_column_index = imagecursor.getColumnIndex(MediaStore.Images.Media._ID);
    this.count = imagecursor.getCount();
    Log.w("", "count is :" + count);
    this.thumbnails = new Bitmap[this.count];
    for (int i = 0; i < this.count; i++) {
                imagecursor.moveToPosition(i);
                int id = imagecursor.getInt(image_column_index);
                thumbnails[i] = MediaStore.Images.Thumbnails.getThumbnail(ctx
                        .getApplicationContext().getContentResolver(), id,
                        MediaStore.Images.Thumbnails.MICRO_KIND, null);
         }
    
    imagecursor.close();
    

    【讨论】:

    • fromto 类型为Date 的日期?
    • 这段代码对我不起作用。我使用getContentResolver().query 而不是managedQuery
    【解决方案2】:

    查询以获取日期之间的图像:

    private Cursor cursorVar;
    
    Calendar fromDateVar = Calendar.getInstance();
    fromDateVar.set(2015, 5, 30);
    
    Calendar toDateVar = Calendar.getInstance();
    toDateVar.set(2016, 5, 30);
    
    cursorVar = getContentResolver().query(
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI, null,
            MediaStore.Images.Media.DATE_TAKEN + ">? and "
                    + MediaStore.Images.Media.DATE_TAKEN + "<?",
            new String[] {fromDateVar.getTimeInMillis() + "", toDateVar.getTimeInMillis() + ""},
            MediaStore.Images.Media.DATE_TAKEN + " DESC");
    

    【讨论】:

      【解决方案3】:
      Calendar fromDateVar = Calendar.getInstance();
      fromDateVar.set(2020, 01, 30);
      
      Calendar toDateVar = Calendar.getInstance();
      toDateVar.set(2020, 05, 30);
      
      
      cursor = getContentResolver().query(
              MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection,
              MediaStore.Images.Media.DATE_TAKEN + ">? and "
                      + MediaStore.Images.Media.DATE_TAKEN + "<?",
              new String[]{fromDateVar.getTimeInMillis() + "", toDateVar.getTimeInMillis() + ""},
              MediaStore.Images.Media.DATE_TAKEN + " DESC");
      
      
      column_index_data = cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA);
      column_index_folder_name = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
      while (cursor.moveToNext()) {
          absolutePathOfImage = cursor.getString(column_index_data);
          listOfAllImages.add(absolutePathOfImage);
      
      }
      

      【讨论】:

        猜你喜欢
        • 2017-06-03
        • 1970-01-01
        • 2010-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-03-26
        相关资源
        最近更新 更多