2017-06-24 4 views
0

S'il vous plaît me donner une solution pour le chargement de toutes les images de stockage interne et externe de téléphone Android? Ma méthode ci-dessous renvoie uniquement les fonds d'écran et les images lockscreen. Pour tester, j'utilise mi redmi note 3 avec android v6.0 os et aucun stockage externe inséré. S'il vous plaît donnez-moi la dernière solution. Je suis un débutant à android.mediastore Android ne retourne pas toutes les images de stockage interne dans le téléphone. Il montre seulement des images lockscreen et des images de fond d'écran. Toute solution?

public ArrayList<String> getImagePaths() { 
      ArrayList<String> resultIAV = new ArrayList<String>(); 
      URI u = MediaStore.Images.Media.INTERNAL_CONTENT_URI; 

      Cursor c = getContentResolver().query(u, projection, null, 
        null, null); 

      column_index_data = c.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA); 

      while (c.moveToNext()) { 
       absolutePathOfImage = c.getString(column_index_data); 
       resultIAV.add(absolutePathOfImage); 
      } 

      return resultIAV; 
    } 

Répondre

1

Utilisez cette option pour obtenir toutes les images de la mémoire interne et externe et ne pas oublier d'ajouter
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> permission dans votre fichier manifeste.

int dataColumnIndex; 
int bucketColumnIndex; 
int displayNameColumnIndex; 
String GalleryThumbnail_Path; 
String bucket; 
String displayName; 
int imageCounter = 0; 

Thread getImages = new Thread(new Runnable() { 
    @Override 
    public void run() { 
     String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.DATE_TAKEN, 
       MediaStore.Images.Media.DISPLAY_NAME, MediaStore.Images.Media.BUCKET_DISPLAY_NAME 
     }; 
     String orderBy = MediaStore.Images.Media.DATE_TAKEN; 
     Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; 
     try { 
      Cursor cursor = context.getContentResolver().query(uri, columns, null, null, orderBy); 
      assert cursor != null; 
      int mCount = cursor.getCount(); 
      for (int i = mCount - 1; i >= 0; i--) { 
       if (imageCounter <= 370) { 
        cursor.moveToPosition(i); 
        dataColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA); 
        bucketColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.BUCKET_DISPLAY_NAME); 
        displayNameColumnIndex = cursor.getColumnIndex(MediaStore.Images.Media.DISPLAY_NAME); 
        GalleryThumbnail_Path = cursor.getString(dataColumnIndex); 
        bucket = cursor.getString(bucketColumnIndex); 
        displayName = cursor.getString(displayNameColumnIndex); 
        myimagesPath.add(GalleryThumbnail_Path); 
        myStorage.add(bucket + "-->" + displayName); 
        imageCounter++; 
        Log.e("Recents " + i + "-->>", "Added to bucket"); 
       } else { 
        break; 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

Cela fonctionne dans Android 7.1.2 aussi (My One OnePlus-que je l'utilise pour le développement)

+0

Merci pour votre aide. Ça marche. Je pensais que EXTERNAL_CONTENT_URI est pour montrer des images de cartes SD seulement. J'utilisais INERNAL_CONTENT_URI pour les images internes. Maintenant, je reçois des images externes + internes. –

+1

Bon de savoir que ça vous a aidé ... –