Ottieni elenco delle gallerie fotografiche su Android

Sto cercando: un elenco dei nomi della galleria fotografica esistente (speriamo anche la loro miniatura superiore) I contenuti della galleria (posso quindi caricare miniature e size complete se necessario)

Come faccio a get un elenco delle "Gallerie" (non so se è il termine corretto in android per i raggruppamenti di immagini visibili nell'applicazione Galleria …) e il loro contenuto? Ho bisogno dell'accesso alla galleria nella sua struttura senza utilizzare l'esposizione della galleria esistente (sto generando un nuovo tutto, non un over layer al richiedente di foto ecc.)

  • Google Play ha rilevato API minima errata
  • Firma apk con .p12
  • phonegap - schermata di spruzzatura per app Android
  • la verifica dell'acquisto della fatturazione dell'applicazione Android non è rioutput
  • android: actionBarStyle richiede livello API 11
  • Aggiornamenti di applicazione di Android Market
  • Presumo MediaStore.Images è where devo essere, ma non vedo niente che mi darà i gruppi …

  • Google Maps android API V2 si è schiantato
  • Cassetto di navigazione Android su più attività
  • Qual è lo scopo del tag <merge> di Android nei layout XML?
  • Java: un WebService che chiede di incorporare un'AsyncTask
  • L'esecuzione di Android Studio non è rioutput per l'attività ': app: preDexDebug'
  • Sono disponibili più grafici a barre impilati utilizzando Achartengine?
  • 4 Solutions collect form web for “Ottieni elenco delle gallerie fotografiche su Android”

    I raggruppamenti sono definiti da MediaStore.Images.Media.BUCKET_DISPLAY_NAME . Ecco il codice di esempio per elencare le immagini e registrare il loro nome e data_taken:

     // which image properties are we querying String[] projection = new String[] { MediaStore.Images.Media._ID, MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.DATE_TAKEN }; // content:// style URI for the "primary" external storage volume Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; // Make the query. Cursor cur = managedQuery(images, projection, // Which columns to return null, // Which rows to return (all rows) null, // Selection arguments (none) null // Ordering ); Log.i("ListingImages"," query count=" + cur.getCount()); if (cur.moveToFirst()) { String bucket; String date; int bucketColumn = cur.getColumnIndex( MediaStore.Images.Media.BUCKET_DISPLAY_NAME); int dateColumn = cur.getColumnIndex( MediaStore.Images.Media.DATE_TAKEN); do { // Get the field values bucket = cur.getString(bucketColumn); date = cur.getString(dateColumn); // Do something with the values. Log.i("ListingImages", " bucket=" + bucket + " date_taken=" + date); } while (cur.moveToNext()); } 
     /** * Getting All Images Path * * @param activity * @return ArrayList with images Path */ public static ArrayList<String> getAllShownImagesPath(Activity activity) { Uri uri; Cursor cursor; int column_index_data, column_index_folder_name; ArrayList<String> listOfAllImages = new ArrayList<String>(); String absolutePathOfImage = null; uri = android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI; String[] projection = { MediaColumns.DATA, MediaStore.Images.Media.BUCKET_DISPLAY_NAME }; cursor = activity.getContentResolver().query(uri, projection, null, null, null); column_index_data = cursor.getColumnIndexOrThrow(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); } return listOfAllImages; } 

    Ecco la soluzione completa in pochi semplici passaggi:

    I prossimi passi ti indirizzeranno come creare un Vector che tratterà gli album trovati in un determinato dispositivo. Ogni album conserva un'image di anteprima e un Vector interno che contiene tutte le immagini dell'album.

    1. Creare un object che terrà le immagini una volta estratto dalla memory. Lo chiameremo PhoneAlbum . Ecco come sta andando a cercare:

       public class PhoneAlbum { private int id; private String name; private String coverUri; private Vector<PhonePhoto> albumPhotos; public int getId() { return id; } public void setId( int id ) { this.id = id; } public String getName() { return name; } public void setName( String name ) { this.name = name; } public String getCoverUri() { return coverUri; } public void setCoverUri( String albumCoverUri ) { this.coverUri = albumCoverUri; } public Vector< PhonePhoto > getAlbumPhotos() { if ( albumPhotos == null ) { albumPhotos = new Vector<>(); } return albumPhotos; } public void setAlbumPhotos( Vector< PhonePhoto > albumPhotos ) { this.albumPhotos = albumPhotos; } } 
    2. Creare un object che contiene le immagini nell'album chiamato PhonePhoto

       public class PhonePhoto { private int id; private String albumName; private String photoUri; public int getId() { return id; } public void setId( int id ) { this.id = id; } public String getAlbumName() { return albumName; } public void setAlbumName( String name ) { this.albumName = name; } public String getPhotoUri() { return photoUri; } public void setPhotoUri( String photoUri ) { this.photoUri = photoUri; } } 
    3. Crea un'interface per gestire le immagini estratte al completamento. Noi lo chiameremo OnPhoneImagesObtained . Ecco qui:

       public interface OnPhoneImagesObtained { void onComplete( Vector<PhoneAlbum> albums ); void onError(); } 
    4. Creare una nuova class: DeviceImageManager

       public class DeviceImageManager { } 
    5. Una volta creato DeviceImageManager , aggiungere il seguente metodo:

       public static void getPhoneAlbums( Context context , OnPhoneImagesObtained listener ){ // Creating vectors to hold the final albums objects and albums names Vector< PhoneAlbum > phoneAlbums = new Vector<>(); Vector< String > albumsNames = new Vector<>(); // which image properties are we querying String[] projection = new String[] { MediaStore.Images.Media.BUCKET_DISPLAY_NAME, MediaStore.Images.Media.DATA, MediaStore.Images.Media._ID }; // content: style URI for the "primary" external storage volume Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; // Make the query. Cursor cur = context.getContentResolver().query(images, projection, // Which columns to return null, // Which rows to return (all rows) null, // Selection arguments (none) null // Ordering ); if ( cur != null && cur.getCount() > 0 ) { Log.i("DeviceImageManager"," query count=" + cur.getCount()); if (cur.moveToFirst()) { String bucketName; String data; String imageId; int bucketNameColumn = cur.getColumnIndex( MediaStore.Images.Media.BUCKET_DISPLAY_NAME); int imageUriColumn = cur.getColumnIndex( MediaStore.Images.Media.DATA); int imageIdColumn = cur.getColumnIndex( MediaStore.Images.Media._ID ); do { // Get the field values bucketName = cur.getString( bucketNameColumn ); data = cur.getString( imageUriColumn ); imageId = cur.getString( imageIdColumn ); // Adding a new PhonePhoto object to phonePhotos vector PhonePhoto phonePhoto = new PhonePhoto(); phonePhoto.setAlbumName( bucketName ); phonePhoto.setPhotoUri( data ); phonePhoto.setId( Integer.valueOf( imageId ) ); if ( albumsNames.contains( bucketName ) ) { for ( PhoneAlbum album : phoneAlbums ) { if ( album.getName().equals( bucketName ) ) { album.getAlbumPhotos().add( phonePhoto ); Log.i( "DeviceImageManager", "A photo was added to album => " + bucketName ); break; } } } else { PhoneAlbum album = new PhoneAlbum(); Log.i( "DeviceImageManager", "A new album was created => " + bucketName ); album.setId( phonePhoto.getId() ); album.setName( bucketName ); album.setCoverUri( phonePhoto.getPhotoUri() ); album.getAlbumPhotos().add( phonePhoto ); Log.i( "DeviceImageManager", "A photo was added to album => " + bucketName ); phoneAlbums.add( album ); albumsNames.add( bucketName ); } } while (cur.moveToNext()); } cur.close(); listener.onComplete( phoneAlbums ); } else { listener.onError(); } } 
    6. Ora tutto quello che hai lasciato è quello di rendere le immagini a schermo. Nel mio caso mi piace usare Picasso . Ecco come lo faccio:

        Picasso.with( getActivity() ) .load( "file:" + mPhoneAlbums.get( i ).getCoverUri() ) .centerCrop() .fit() .placeholder( R.drawable.temp_image ) .into( mAlbumPreview ); 
    7. Non dimenticare di aggiungere un'authorization per leggere l'archiviazione esterna nel tuo manifesto:

       <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 

    Questo è tutto. Sei bravo ad andare! In bocca al lupo!

    Scarica il codice sorgente da qui ( Scarica tutte le immagini dalla galleria in android in modo programmato )

    activity_main.xml

     <RelativeLayout android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" xmlns:android="http://schemas.android.com/apk/res/android"> <GridView android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/gv_folder" android:numColumns="2" android:layout_marginLeft="10dp" android:layout_marginRight="10dp"></GridView> </RelativeLayout> 

    MainActivity.java

     package galleryimages.galleryimages; import android.Manifest; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.net.Uri; import android.provider.MediaStore; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.GridView; import android.widget.Toast; import java.util.ArrayList; public class MainActivity extends AppCompatActivity { public static ArrayList<Model_images> al_images = new ArrayList<>(); boolean boolean_folder; Adapter_PhotosFolder obj_adapter; GridView gv_folder; private static final int REQUEST_PERMISSIONS = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); gv_folder = (GridView)findViewById(R.id.gv_folder); gv_folder.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { Intent intent = new Intent(getApplicationContext(), PhotosActivity.class); intent.putExtra("value",i); startActivity(intent); } }); if ((ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) && (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED)) { if ((ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) && (ActivityCompat.shouldShowRequestPermissionRationale(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE))) { } else { ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE}, REQUEST_PERMISSIONS); } }else { Log.e("Else","Else"); fn_imagespath(); } } public ArrayList<Model_images> fn_imagespath() { al_images.clear(); int int_position = 0; Uri uri; Cursor cursor; int column_index_data, column_index_folder_name; String absolutePathOfImage = null; uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; String[] projection = {MediaStore.MediaColumns.DATA, MediaStore.Images.Media.BUCKET_DISPLAY_NAME}; final String orderBy = MediaStore.Images.Media.DATE_TAKEN; cursor = getApplicationContext().getContentResolver().query(uri, projection, null, null, orderBy + " 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); Log.e("Column", absolutePathOfImage); Log.e("Folder", cursor.getString(column_index_folder_name)); for (int i = 0; i < al_images.size(); i++) { if (al_images.get(i).getStr_folder().equals(cursor.getString(column_index_folder_name))) { boolean_folder = true; int_position = i; break; } else { boolean_folder = false; } } if (boolean_folder) { ArrayList<String> al_path = new ArrayList<>(); al_path.addAll(al_images.get(int_position).getAl_imagepath()); al_path.add(absolutePathOfImage); al_images.get(int_position).setAl_imagepath(al_path); } else { ArrayList<String> al_path = new ArrayList<>(); al_path.add(absolutePathOfImage); Model_images obj_model = new Model_images(); obj_model.setStr_folder(cursor.getString(column_index_folder_name)); obj_model.setAl_imagepath(al_path); al_images.add(obj_model); } } for (int i = 0; i < al_images.size(); i++) { Log.e("FOLDER", al_images.get(i).getStr_folder()); for (int j = 0; j < al_images.get(i).getAl_imagepath().size(); j++) { Log.e("FILE", al_images.get(i).getAl_imagepath().get(j)); } } obj_adapter = new Adapter_PhotosFolder(getApplicationContext(),al_images); gv_folder.setAdapter(obj_adapter); return al_images; } @Override public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case REQUEST_PERMISSIONS: { for (int i = 0; i < grantResults.length; i++) { if (grantResults.length > 0 && grantResults[i] == PackageManager.PERMISSION_GRANTED) { fn_imagespath(); } else { Toast.makeText(MainActivity.this, "The app was not allowed to read or write to your storage. Hence, it cannot function properly. Please consider granting it this permission", Toast.LENGTH_LONG).show(); } } } } } } 
    L'Android è un fan Android di Google, tutto su telefoni Android, Android Wear, Android Dev e applicazioni Android Games e così via.