Intent + Share + Action_Send_Multiple + Facebook no funciona

Estoy tratando de usar Intent para sharing.It funciona bien con una sola imagen o cuando uso Intent.ACTION_SEND.

Pero cuando uso Intent.ACTION_SEND_MULTIPLE No parece funcionar en Facebook, por ejemplo, estoy usando código debajo.

ArrayList<Uri> files = new ArrayList<Uri>(); File a = new File(FileUtil.getDefaultMediaFolderPath(), "a.jpeg"); File b = new File(FileUtil.getDefaultMediaFolderPath(), "b.jpeg"); files.add(Uri.fromFile(a)); files.add(Uri.fromFile(b)); if (a.exists()) { if (b.exists()) { System.out.println("Both present."); } } Intent shareIntent = new Intent(Intent.ACTION_SEND_MULTIPLE); shareIntent.setType("*/*"); shareIntent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, files); startActivity(Intent.createChooser(shareIntent,"share via.")); 

Por encima del código funciona bien con Gmail y adjunta las fotos con Gmail. Pero con Facebook no parece funcionar y las imágenes no se adjuntan.

He intentado la combinación diferente pero nada parece trabajar. Aunque cuando trato de compartir varias imágenes de la galería por defecto del dispositivo funciona bien y adjunta todas las imágenes en Facebook.

Por favor, ayúdame !!

Después de intentar un montón de cosas Finalmente vine a la solución que En la versión actual de Facebook rompió Intent para la aceptación de múltiples imágenes, mientras que viene como intención. ACTION_SEND_MULTIPLE. Pero me sorprendió cuando Múltiple compartir está trabajando con la Galería predeterminada en mi dispositivo. Finalmente con la ayuda de mi amigo (no quería tomar crédito de él). He llegado a saber que Default GAllery está enviando archivos en URI usando el proveedor de contenido thats por qué están trabajando Así que he cambiado mi lista de URI para Facebook (he creado el diálogo de compartir personalizado, por lo que puede interceptar qué opción está seleccionada de diálogo Compartir abierto vía Intención.)

 private void updateUrisForFacebook() { if (intent.getAction().equalsIgnoreCase(Intent.ACTION_SEND_MULTIPLE)) { ArrayList<Uri> uris = intent .getParcelableArrayListExtra(Intent.EXTRA_STREAM); for (int i = 0; i < uris.size(); i++) { Uri uri = uris.get(i); String path = uri.getPath(); File imageFile = new File(path); uri = getImageContentUri(imageFile); uris.set(i, uri); } intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris); } } private Uri getImageContentUri(File imageFile) { String filePath = imageFile.getAbsolutePath(); Cursor cursor = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[] { MediaStore.Images.Media._ID }, MediaStore.Images.Media.DATA + "=? ", new String[] { filePath }, null); if (cursor != null && cursor.moveToFirst()) { int id = cursor.getInt(cursor .getColumnIndex(MediaStore.MediaColumns._ID)); Uri baseUri = Uri.parse("content://media/external/images/media"); return Uri.withAppendedPath(baseUri, "" + id); } else { if (imageFile.exists()) { ContentValues values = new ContentValues(); values.put(MediaStore.Images.Media.DATA, filePath); return context.getContentResolver().insert( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); } else { return null; } } } 

Finalmente funciona

Así que la idea básica es convertir su lista de URI en la lista URI del proveedor de contenido y luego comprobar que funcionará.

Además de la respuesta aceptada (que he subrayado) aquí es otro método, que también cierra el cursor:

 private Uri getContentUri(Context context, String contentPath) { Cursor c = context.getContentResolver().query( MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new String[]{MediaStore.Images.ImageColumns._ID, MediaStore.Images.ImageColumns.DATA}, MediaStore.Images.ImageColumns.DATA + "=?", new String[]{contentPath}, null ); Uri contentUri = null; try { if (c != null && c.getCount() > 0 && c.moveToFirst()) { int colId = c.getColumnIndex(MediaStore.Images.ImageColumns._ID); if (colId > -1) { int id = c.getInt(colId); contentUri = Uri.withAppendedPath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, Integer.toString(id)); } } } catch (Exception e) { } finally { try { if (c != null) { c.close(); } } catch (Exception e) {} } return contentUri; } 
  • ¿Por qué el ID de aplicación de Facebook de repente se convierte en no válido?
  • Android facebook-android-sdk: 4.0.0, ¿cómo puedo eliminar la barra de progreso de inicio de sesión?
  • Android: Share ¿La intención de la imagen no funciona con Facebook?
  • Token AccessToken: ACCESS_TOKEN_REMOVED en Facebook SDK de Android
  • Error de "ANDROID_BUILD_SDK_VERSION" con Facebook SDK
  • Facebook como el botón de redireccionamiento al sitio de facebook en android
  • ¿Necesito agregar un nuevo hash clave a la configuración de la aplicación de Facebook cada vez que cambie de ordenador?
  • ¿Cómo abrir Twitter y Facebook con Phonegap?
  • Facebook SDK: invalide alcance: información básica use public_profile, amigos de usuario en su lugar
  • Marcar al usuario seleccionado como se ha activado en FriendPicker (Facebook SDK para Android)
  • Comparte texto en Facebook desde la aplicación de Android a través de ACTION_SEND.
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.