Seleccione la imagen de la galería en Android Fragment

Quiero seleccionar la intención de la galería en el fragmento.cuando el usuario elige la opción para seleccionar la imagen de la galería, entonces la galería se abre y inmediatamente se llama onActivityResult de fragmento.y cuando el usuario escoge la imagen, a continuación, onActivityResult () no se llama.Así que no puedo seleccionar Imagen de la galería. Belo es mi código para abrir la galería –

Intent intent = new Intent(Intent.ACTION_PICK,android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); intent.setType("video/, images/"); startActivityForResult(intent, 2); 

Y aquí está mi onActivityResult-

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.d(TAG, "onActivityResult"); // not printed Toast.makeText(mContext, "aaaa"+requestCode, Toast.LENGTH_SHORT).show(); } 

Cuál es el problema en mi código.

Gracias por adelantado.

# Te estoy mostrando un ejemplo en el que utilicé un ImageView para mostrar el resultado de la imagen. Hay dos métodos utilizados 1.Desde la cámara y 2.Desde la tarjeta SD #

 public void camera(View view) { Log.i("SonaSys", "startCameraActivity()"); File file = new File(path); Uri outputFileUri = Uri.fromFile(file); Intent intent = new Intent( android.provider.MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri); startActivityForResult(intent, 0); } public void gallery(View view) { String path = Environment.getExternalStorageDirectory() + "/images/imagename.jpg"; Intent i = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(i, RESULT_LOAD_IMAGE); } protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == RESULT_LOAD_IMAGE && resultCode == RESULT_OK && null != 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]); String picturePath = cursor.getString(columnIndex); cursor.close(); bitmap = BitmapFactory.decodeFile(picturePath); image.setImageBitmap(bitmap); if (bitmap != null) { ImageView rotate = (ImageView) findViewById(R.id.rotate); rotate.setVisibility(View.VISIBLE); } } else { Log.i("SonaSys", "resultCode: " + resultCode); switch (resultCode) { case 0: Log.i("SonaSys", "User cancelled"); break; case -1: onPhotoTaken(); break; } } } protected void onPhotoTaken() { // Log message Log.i("SonaSys", "onPhotoTaken"); taken = true; imgCapFlag = true; BitmapFactory.Options options = new BitmapFactory.Options(); options.inSampleSize = 4; bitmap = BitmapFactory.decodeFile(path, options); image.setImageBitmap(bitmap); } 

Use esto para abrir el selector de imágenes de Android:

 if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) { Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select Picture"), GALLERY_INTENT_CALLED); } else { Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType("image/*"); startActivityForResult(intent, GALLERY_KITKAT_INTENT_CALLED); } 

Y para onActivityResult utilice esto:

 @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); Cursor cursor = null; if (resultCode != Activity.RESULT_OK) return; if (data == null) return; Uri originalUri = null; if (requestCode == GALLERY_INTENT_CALLED && data != null) { originalUri = data.getData(); String[] filePathColumn = {MediaStore.Images.Media.DATA}; cursor = getActivity().getContentResolver().query(originalUri, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); filePath = cursor.getString(columnIndex); cursor.close(); Log.d("path of uri", filePath); } else if (requestCode == GALLERY_KITKAT_INTENT_CALLED && data != null) { originalUri = data.getData(); final int takeFlags = data.getFlags() & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION); // Check for the freshest data. getActivity().getContentResolver().takePersistableUriPermission( originalUri, takeFlags); Log.d("Uri: ", originalUri.toString()); filePath = getPath(getActivity(), originalUri); Log.d("filepath", filePath); } } @SuppressLint("NewApi") public static String getPath(final Context context, final Uri uri) { final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT; // DocumentProvider if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) { // ExternalStorageProvider if (isExternalStorageDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; if ("primary".equalsIgnoreCase(type)) { return Environment.getExternalStorageDirectory() + "/" + split[1]; } // TODO handle non-primary volumes } // DownloadsProvider else if (isDownloadsDocument(uri)) { final String id = DocumentsContract.getDocumentId(uri); final Uri contentUri = ContentUris.withAppendedId( Uri.parse("content://downloads/public_downloads"), Long.valueOf(id)); return getDataColumn(context, contentUri, null, null); } // MediaProvider else if (isMediaDocument(uri)) { final String docId = DocumentsContract.getDocumentId(uri); final String[] split = docId.split(":"); final String type = split[0]; Uri contentUri = null; if ("image".equals(type)) { contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI; } else if ("video".equals(type)) { contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; } else if ("audio".equals(type)) { contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI; } final String selection = "_id=?"; final String[] selectionArgs = new String[]{split[1]}; return getDataColumn(context, contentUri, selection, selectionArgs); } } // MediaStore (and general) else if ("content".equalsIgnoreCase(uri.getScheme())) { return getDataColumn(context, uri, null, null); } // File else if ("file".equalsIgnoreCase(uri.getScheme())) { return uri.getPath(); } return null; } /** * Get the value of the data column for this Uri. This is useful for * MediaStore Uris, and other file-based ContentProviders. * * @param context The context. * @param uri The Uri to query. * @param selection (Optional) Filter used in the query. * @param selectionArgs (Optional) Selection arguments used in the query. * @return The value of the _data column, which is typically a file path. */ public static String getDataColumn(Context context, Uri uri, String selection, String[] selectionArgs) { Cursor cursor = null; final String column = "_data"; final String[] projection = {column}; try { cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs, null); if (cursor != null && cursor.moveToFirst()) { final int column_index = cursor.getColumnIndexOrThrow(column); return cursor.getString(column_index); } } finally { if (cursor != null) cursor.close(); } return null; } /** * @param uri The Uri to check. * @return Whether the Uri authority is ExternalStorageProvider. */ public static boolean isExternalStorageDocument(Uri uri) { return "com.android.externalstorage.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is DownloadsProvider. */ public static boolean isDownloadsDocument(Uri uri) { return "com.android.providers.downloads.documents".equals(uri.getAuthority()); } /** * @param uri The Uri to check. * @return Whether the Uri authority is MediaProvider. */ public static boolean isMediaDocument(Uri uri) { return "com.android.providers.media.documents".equals(uri.getAuthority()); } 

Utilizar este código para elegir la imagen,

 Intent intent = new Intent(); intent.setType("image/*"); intent.setAction(Intent.ACTION_GET_CONTENT); startActivityForResult(Intent.createChooser(intent, "Select image"), PICK_IMAGE); 

Como Activity obtiene el resultado de onActivityResult (), necesitará anular el onActivityResult de la actividad () y llamar a super.onActivityResult () para propagarse al fragmento respectivo para los códigos de resultados no controlados o para todos.

 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); } 

Para ayudar a otros que están luchando con este error, le sugiero lo siguiente:

1. El modo de inicio de la actividad de su fragmento

Si el modo de inicio de su actividad es "singleInstance", en ese caso el onActivityResult se llamará automáticamente una vez que abandone la actividad y vaya a la actividad en la que se supone que escoge la imagen. Esto es cierto para la intención de la cámara también. Trate de cambiar su modo de lanzamiento a "singleTop" o cualquier cosa como una alternativa al modo de lanzamiento que tiene ahora mismo. De esta manera lo que sucederá será que su activityOnResult se llamará sólo cuando termine de recoger la imagen. También el resultado será volver al fragmento sólo desde donde se ha denominado startActivityForResult. Le sugeriré que considere implementar el diálogoFragmento para dar opción al usuario para recoger la imagen o hacer clic en la imagen

2. ¿Cómo ha llamado a la startActivityForResult

Su otra cosa interesante, si llamas a tu startActivityResult del fragmento usando el contexto local del fragmento, el resultado será devuelto al fragmento, pero si lo llamas usando el contexto de la actividad del fragmento como getActivity (). StartActivityResult el resultado será pasado de vuelta A la actividad del fragmento padre. Así que depende de donde usted quiere manejarlo. Otra cosa importante, llame a la

Super.onActivityResult (requestCode, resultCode, data);

En su método donde está obteniendo el resultado. Aparte de estos intentar seguir la sugerencia de que otro ha proporcionado para recoger la imagen con la intención adecuada.

  • Androide galería circular?
  • Arrastrar y soltar imágenes de la Galería Android
  • Obtener imagen de la Galería y mostrar en ImageView
  • Android galería problema configuración de tamaño de imagen a través de xml
  • Android: ¿A qué se refiere este mensaje de advertencia? - (WebCore)
  • Galería abierta de Android desde la carpeta
  • La vista de la galería no comienza desde la izquierda
  • Desplazamiento infinito de la galería con determinada posición de la imagen
  • Galería circular automática de Android
  • Subir imagen a la galería de emuladores
  • ¿Cómo puedo configurar un elemento seleccionado por defecto para mi galería?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.