0

делает запрос с MediaStore.Images.Media не показывает все изображения, будь то внутреннее содержание запроса или внешнее содержимоеMediaStore.Images.Media не способен показывать все изображения, решение

Результаты (миниатюры и местоположение, из которого извлекаются миниатюры) не одинаковы для даже обычных устройств. У устройств без SD-карты и только внутреннего хранилища есть разные результаты изображения, устройства Samsung имеют разные результаты, устройства Google имеют разные результаты.

Конкретно с этим кодом, который используется вокруг StackOverflow в виде раствора,

  final String[] columns = {MediaStore.Images.Thumbnails._ID}; 
      final String orderBy = MediaStore.Images.Media._ID; 
      Cursor imagecursor = context.getContentResolver().query(
        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, 
        null, null, orderBy); 
      if (imagecursor != null) { 
       int image_column_index = imagecursor 
         .getColumnIndex(MediaStore.Images.Media._ID); 
       int count = imagecursor.getCount(); 
       for (int i = 0; i < count; i++) { 
        imagecursor.moveToPosition(i); 
        int id = imagecursor.getInt(image_column_index); 
        ImageItem imageItem = new ImageItem(); 
        imageItem.id = id; 
        lastId = id; 
        imageItem.img = MediaStore.Images.Thumbnails.getThumbnail(
          context.getApplicationContext().getContentResolver(), id, 
          MediaStore.Images.Thumbnails.MINI_KIND, null); 
        images.add(imageItem); 
       } 
       imagecursor.close(); 

Я смотрю на код, и кажется, звук, но мне нужно лучшее решение, потому что результаты различаются, и на некоторых устройствах у меня есть не знаю, где были выведены полученные эскизы от

+0

getThumbnail изображения не существует, пока они не будут созданы. Вы получите эскизы из своего вопроса, чтобы ответить на все изображения. – danny117

+0

@ danny117 «Вы получите миниатюры из своего вопроса, чтобы ответить на все изображения», что? это не похоже на когерентное предложение для меня, вы говорите, что я только запрашиваю миниатюры, но вместо этого я должен запрашивать другой аксессуар для изображений? – CQM

+0

у вас есть пример кода, чтобы получить уменьшенное изображение. Миниатюры могут быть созданы на лету os. Метод getThumbnail проверяет, были ли созданы эскизы указанного изображения (origId). Он будет заблокирован до тех пор, пока миниатюры не будут сгенерированы. Поэтому миниатюры, возможно, не были созданы, и поэтому они не существуют там, где нет устройства. Что вы хотите, чтобы все изображения или все миниатюры? – danny117

ответ

2

Как заметил @ danny117, попытка получить THUMBNAILS была ошибочным предположением. Нельзя полагаться на существование эскизов для каждого изображения в системе Android.

Так что я в конечном итоге получить все изображения на основе типа пантомимы, а также использовать файлы Mediastore

String[] projection = { 
      MediaStore.Files.FileColumns._ID, 
      MediaStore.Files.FileColumns.DATA, 
      MediaStore.Files.FileColumns.DATE_ADDED, 
      MediaStore.Files.FileColumns.MEDIA_TYPE, 
      MediaStore.Files.FileColumns.MIME_TYPE, 
      MediaStore.Files.FileColumns.TITLE 
    }; 

    // Return only video and image metadata. 
    String selection = MediaStore.Files.FileColumns.MEDIA_TYPE + "=" 
      + MediaStore.Files.FileColumns.MEDIA_TYPE_IMAGE 
      + " OR " 
      + MediaStore.Files.FileColumns.MEDIA_TYPE + "=" 
      + MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO; 

    Uri queryUri = MediaStore.Files.getContentUri("external"); 

    CursorLoader cursorLoader = new CursorLoader(
      getActivity(), 
      queryUri, 
      projection, 
      selection, 
      null, // Selection args (none). 
      MediaStore.Files.FileColumns.DATE_ADDED + " DESC" // Sort order. 
    ); 


    images.clear(); 
    /* 
     final String[] columns = {MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATE_ADDED}; 
     final String orderBy = MediaStore.Images.Media.DATE_ADDED + " DESC"; 
     Cursor imagecursor = getActivity().getContentResolver().query(
      MediaStore.Images.Media.EXTERNAL_CONTENT_URI, columns, 
      null, null, orderBy); 
    */ 

    Cursor imagecursor = cursorLoader.loadInBackground(); 

    if (imagecursor != null) { 
     int image_column_index = imagecursor 
       .getColumnIndex(MediaStore.Files.FileColumns._ID); 
     int type_column_index = imagecursor.getColumnIndex(MediaStore.Files.FileColumns.MIME_TYPE); 
     int count = imagecursor.getCount(); 
     for (int i = 0; i < count; i++) { 
      imagecursor.moveToPosition(i); 
      int id = imagecursor.getInt(image_column_index); 
      String mime_type = imagecursor.getString(type_column_index); 
      ImageItem imageItem = new ImageItem(); 
      imageItem.id = id; 
      //lastId = id; 

      if(!mime_type.contains("video")) 
       imageItem.uriString = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, String.valueOf(id)).toString(); 
      else 
       imageItem.uriString = MediaStore.Video.Media.EXTERNAL_CONTENT_URI.withAppendedPath(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, String.valueOf(id)).toString(); 



      images.add(imageItem); 
     } 

     //add ImageItem at top of list 

     imagecursor.close(); 
    } 
+0

Я хочу получить только 20 изображений из галереи, которые должны быть самыми последними, у вас есть решение для этого, и мое приложение очень медленно, когда я использую Cursor imagecursor = getContentResolver(). Query ( MediaStore.Images .Media.EXTERNAL_CONTENT_URI, столбцы, null, null, orderBy); можно улучшить время доступа, если у вас есть исправление, ответьте, http://stackoverflow.com/questions/36417861/getting-the-recent-images-from-gallery-using-cursor – HAXM

 Смежные вопросы

  • Нет связанных вопросов^_^