Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Elige la foto de la galería en android

Me encuentro con un problema al recoger imágenes de la galería con android 5.0. Mi código para iniciar la intención es:

private void takePictureFromGallery() { Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.INTERNAL_CONTENT_URI); startActivityForResult(intent, PICK_FROM_FILE); } 

Y aquí está la función llamada en el método onActivityResult () para el código de solicitud PICK_FROM_FILE

 private void handleGalleryResult(Intent data) { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); // field declaration private String mTmpGalleryPicturePath; mTmpGalleryPicturePath = cursor.getString(columnIndex); cursor.close(); // at this point mTmpGalleryPicturePath is null ... } 

Para las versiones anteriores a 5.0 este código siempre funciona, utilizando la aplicación com.android.gallery. Google Fotos es la aplicación de galería por defecto en Android 5.0. ¿Podría ser este problema depende de la aplicación o es un problema de la nueva distribución del sistema operativo Android?

EDITAR

Entiendo el problema: Google Fotos busca automáticamente el contenido de sus imágenes de backupped en el servidor de nube. De hecho tratando de practicar sugerir por @ maveň si apago cada conexión a Internet y después de elegir una imagen, no obtiene resultado por la decodificación Bitmap de InputStream.

Así que en este punto pregunta: ¿hay una manera en android 5.0 para manejar la acción Intent.ACTION_PICK para que el sistema de búsqueda elegir en la galería de imágenes de dispositivos locales?

  • Cómo actualizar la galería después de mover la foto mediante programación?
  • Fije una imagen de la galería para el fondo del teléfono de escritorio (androide-java)
  • 2 Solutions collect form web for “Elige la foto de la galería en android”

    Encontré solución a este problema combinando los siguientes métodos. Aquí para iniciar la actividad para elegir una imagen de la galería del dispositivo:

     private void takePictureFromGallery() { startActivityForResult( Intent.createChooser( new Intent(Intent.ACTION_GET_CONTENT) .setType("image/*"), "Choose an image"), PICK_FROM_FILE); } 

    Aquí para manejar el resultado de la intención, como se describe en este post , tenga en cuenta que la función getPath() funciona de forma diferente desde la versión de compilación android:

     private void handleGalleryResult(Intent data) { Uri selectedImage = data.getData(); mTmpGalleryPicturePath = getPath(selectedImage); if(mTmpGalleryPicturePath!=null) ImageUtils.setPictureOnScreen(mTmpGalleryPicturePath, mImageView); else { try { InputStream is = getContentResolver().openInputStream(selectedImage); mImageView.setImageBitmap(BitmapFactory.decodeStream(is)); mTmpGalleryPicturePath = selectedImage.getPath(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @SuppressLint("NewApi") private String getPath(Uri uri) { if( uri == null ) { return null; } String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor; if(Build.VERSION.SDK_INT >19) { // Will return "image:x*" String wholeID = DocumentsContract.getDocumentId(uri); // Split at colon, use second item in the array String id = wholeID.split(":")[1]; // where id is equal to String sel = MediaStore.Images.Media._ID + "=?"; cursor = getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, projection, sel, new String[]{ id }, null); } else { cursor = getContentResolver().query(uri, projection, null, null, null); } String path = null; try { int column_index = cursor .getColumnIndex(MediaStore.Images.Media.DATA); cursor.moveToFirst(); path = cursor.getString(column_index).toString(); cursor.close(); } catch(NullPointerException e) { } return path; } 
    • takePictureFromGallery() se invoca desde onActivityResult

    ¡¡Eso es todo!!

    Prueba esto:

     //5.0 Intent i = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, CHOOSE_IMAGE_REQUEST); 

    Utilice lo siguiente en el onActivityResult:

     Uri selectedImageURI = data.getData(); input = c.getContentResolver().openInputStream(selectedImageURI); BitmapFactory.decodeStream(input , null, opts); 

    Actualizar

     @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Uri selectedImageUri = data.getData(); String tempPath = getPath(selectedImageUri); /** * helper to retrieve the path of an image URI */ public String getPath(Uri uri) { if( uri == null ) { return null; } String[] projection = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(uri, projection, null, null, null); if( cursor != null ){ int column_index = cursor .getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); return cursor.getString(column_index); } return uri.getPath(); } } } 

    TempPath almacenará la ruta de acceso de ImageSelected

    Compruebe esto para más detalles

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.