Cómo puedo mostrar imágenes de una carpeta específica en la galería de Android

¿Cómo puedo mostrar todas las imágenes de una carpeta específica en la galería de Android como, por ejemplo, whatapp hace. Estoy utilizando MediaScannerConnectionClient

File folder = new File("/sdcard/myfolder/"); allFiles = folder.list(); SCAN_PATH=Environment.getExternalStorageDirectory().toString()+"/myfolder/"+allFiles[0]; @Override public void onScanCompleted(String path, Uri uri) { try { if (uri != null) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); } } finally { conn.disconnect(); conn = null; } } private void startScan() { if (conn != null) { conn.disconnect(); } conn = new MediaScannerConnection(this, this); conn.connect(); } @Override public void onMediaScannerConnected() { conn.scanFile(SCAN_PATH, "image/*"); } 

Pero estoy consiguiendo un error en este punto:

  Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); 

Específicos aquí:

 startActivity(intent); 

Error al obtener el tipo para: content: // media / external / images / media / 267830 No se ha encontrado actividad para manejar Intent

En onScanCompleted mis parámetros de ruta de acceso y uri no son nulos.

Hola, puedes usar el código de abajo, espero que te ayude.

 package com.example.browsepicture; import java.io.File; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.media.MediaScannerConnection; import android.media.MediaScannerConnection.MediaScannerConnectionClient; import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class BrowsePicture2 extends Activity { String SCAN_PATH; File[] allFiles ; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_browse_picture); File folder = new File(Environment.getExternalStorageDirectory().getPath()+"/aaaa/"); allFiles = folder.listFiles(); ((Button) findViewById(R.id.button1)) .setOnClickListener(new OnClickListener() { public void onClick(View arg0) { new SingleMediaScanner(BrowsePicture2.this, allFiles[0]); } }); } public class SingleMediaScanner implements MediaScannerConnectionClient { private MediaScannerConnection mMs; private File mFile; public SingleMediaScanner(Context context, File f) { mFile = f; mMs = new MediaScannerConnection(context, this); mMs.connect(); } public void onMediaScannerConnected() { mMs.scanFile(mFile.getAbsolutePath(), null); } public void onScanCompleted(String path, Uri uri) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(uri); startActivity(intent); mMs.disconnect(); } } } 

Debe agregar Grid view Adapter class.

 public class GalleryPictureActivity extends Activity { private String[] FilePathStrings; private File[] listFile; GridView grid; GridViewAdapter adapter; File file; public static Bitmap bmp = null; ImageView imageview; @Override protected void onCreate (Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_gallery_picture); // Check for SD Card if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(this, "Error! No SDCARD Found!", Toast.LENGTH_LONG).show(); } else { // Locate the image folder in your SD Card file = new File(Environment.getExternalStorageDirectory() .getPath() + "/images"); } if (file.isDirectory()) { listFile = file.listFiles(); FilePathStrings = new String[listFile.length]; for (int i = 0; i < listFile.length; i++) { FilePathStrings[i] = listFile[i].getAbsolutePath(); } } grid = (GridView)findViewById(R.id.gridview); adapter = new GridViewAdapter(this, FilePathStrings); grid.setAdapter(adapter); grid.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick (AdapterView<?> parent, View view, int position, long id) { imageview = (ImageView)findViewById(R.id.imageView1); int targetWidth = 700; int targetHeight = 500; BitmapFactory.Options bmpOptions = new BitmapFactory.Options(); bmpOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(FilePathStrings[position], bmpOptions); int currHeight = bmpOptions.outHeight; int currWidth = bmpOptions.outWidth; int sampleSize = 1; if (currHeight > targetHeight || currWidth > targetWidth) { if (currWidth > currHeight) sampleSize = Math.round((float)currHeight / (float)targetHeight); else sampleSize = Math.round((float)currWidth / (float)targetWidth); } bmpOptions.inSampleSize = sampleSize; bmpOptions.inJustDecodeBounds = false; bmp = BitmapFactory.decodeFile(FilePathStrings[position], bmpOptions); imageview.setImageBitmap(bmp); imageview.setScaleType(ImageView.ScaleType.FIT_XY); bmp = null; } }); } } 

Otro adaptador GridView de clase:

  public class GridViewAdapter extends BaseAdapter { private Activity activity; private String[] filepath; private static LayoutInflater inflater = null; Bitmap bmp = null; public GridViewAdapter (Activity a, String[] fpath) { activity = a; filepath = fpath; inflater = (LayoutInflater)activity .getSystemService(Context.LAYOUT_INFLATER_SERVICE); } public int getCount () { return filepath.length; } public Object getItem (int position) { return position; } public long getItemId (int position) { return position; } public View getView (int position, View convertView, ViewGroup parent) { View vi = convertView; if (convertView == null) vi = inflater.inflate(R.layout.gridview_item, null); ImageView image = (ImageView)vi.findViewById(R.id.image); int targetWidth = 100; int targetHeight = 100; BitmapFactory.Options bmpOptions = new BitmapFactory.Options(); bmpOptions.inJustDecodeBounds = true; BitmapFactory.decodeFile(filepath[position], bmpOptions); int currHeight = bmpOptions.outHeight; int currWidth = bmpOptions.outWidth; int sampleSize = 1; if (currHeight > targetHeight || currWidth > targetWidth) { if (currWidth > currHeight) sampleSize = Math.round((float)currHeight / (float)targetHeight); else sampleSize = Math.round((float)currWidth / (float)targetWidth); } bmpOptions.inSampleSize = sampleSize; bmpOptions.inJustDecodeBounds = false; bmp = BitmapFactory.decodeFile(filepath[position], bmpOptions); image.setImageBitmap(bmp); image.setScaleType(ImageView.ScaleType.FIT_XY); bmp = null; return vi; } } 

Actividad:

Activity_gallery_picture:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/LinearLayout1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:gravity="center" > <GridView android:id="@+id/gridview" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_weight=".85"> </GridView> <ImageView android:id="@+id/imageView1" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_weight=".25" android:scaleType="fitXY" android:src="@drawable/galleryimage" /> </LinearLayout> 

Otra actividad Layout:

  <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" > <ImageView android:id="@+id/image" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </RelativeLayout> 

Puede utilizar android.database.Cursor

 public boolean OpenGalleryFromFolder(android.content.Context context, String folderName) { String filePath = android.os.Environment.getExternalStorageDirectory().getPath() + "/Pictures/" + folderName + "/"; return OpenGalleryFromPathToFolder(context, filePath); } // Finds the first image in the specified folder and uses it to open a the devices native gallery app with all images in that folder. public boolean OpenGalleryFromPathToFolder(android.content.Context context, String folderPath) { java.io.File folder = new java.io.File(folderPath); java.io.File[] allFiles = folder.listFiles(); if (allFiles != null && allFiles.length > 0) { android.net.Uri imageInFolder = getImageContentUri(context, allFiles[0]); if (imageInFolder != null) { android.content.Intent intent = new android.content.Intent(android.content.Intent.ACTION_VIEW); intent.setData(imageInFolder); context.startActivity(intent); return true; } } return false; } // converts the absolute path of a file to a content path // absolute path example: /storage/emulated/0/Pictures/folderName/Image1.jpg // content path example: content://media/external/images/media/47560 private android.net.Uri getImageContentUri(android.content.Context context, java.io.File imageFile) { String filePath = imageFile.getAbsolutePath(); android.database.Cursor cursor = context.getContentResolver().query( android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{android.provider.MediaStore.Images.Media._ID}, android.provider.MediaStore.Images.Media.DATA + "=? ", new String[]{filePath}, null); if (cursor != null && cursor.moveToFirst()) { int id = cursor.getInt(cursor.getColumnIndex(android.provider.MediaStore.MediaColumns._ID)); return android.net.Uri.withAppendedPath(android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "" + id); } else { if (imageFile.exists()) { android.content.ContentValues values = new android.content.ContentValues(); values.put(android.provider.MediaStore.Images.Media.DATA, filePath); return context.getContentResolver().insert( android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); } else { return null; } } } 

La respuesta dada por @Talha funciona bien pero intenta abrir la imagen usando las opciones de la aplicación de imagen. Si desea actualizar la galería con una carpeta en la tarjeta sd, puede modificar el código como se muestra a continuación para SingleMediaScanner

 class SingleMediaScanner implements MediaScannerConnectionClient { private MediaScannerConnection mMs; private File mFile; public SingleMediaScanner(Context context, File f) { mFile = f; mMs = new MediaScannerConnection(context, this); mMs.connect(); } public void onMediaScannerConnected() { mMs.scanFile(mFile.getAbsolutePath(), null); } public void onScanCompleted(String path, Uri uri) { mMs.disconnect(); } } 

Y en el botón haga clic en el bucle sobre cada archivo que recibe de:

  File folder = new File(Environment.getExternalStorageDirectory().getPath()+"/aaaa/"); allFiles = folder.listFiles(); 

Y pase eso a SingleMediaScanner uno a la vez.

Funcionó en mi caso.

  • ExifInterface JHEAD no puede abrir el error (android)
  • Aplicación "espectador" de la imagen de Android
  • ¿Guardar el contenido de la web para la navegación sin conexión?
  • Android, cómo perezosos cargar imágenes de url y persistentemente caché en el widget de la galería?
  • ¿Cómo recortar una imagen cuyo URI se conoce en Android?
  • Recorte de imágenes en Droid X establece la imagen resultante como fondo de pantalla
  • Página de Android / borde detectar y transformar la página. Convertir a B / N tiff
  • Efficient Way para almacenar imágenes en android
  • Galería de imágenes con una Scrollview horizontal
  • Android: cambia el tamaño de la imagen en la galería según la resolución del dispositivo
  • ListView con imagen de fondo
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.