La intención de compartir Google+ no puede acceder a la imagen

Estoy llamando a una intención de compartir una imagen. Esto funciona con la mayoría de los proveedores, pero con Google+. Google+ abre la actividad de publicación sin la imagen y muestra el brindis "Solo puedes publicar fotos almacenadas en tu dispositivo". al mismo tiempo.

File f = storeImage(image); // f = /data/data/com.myapp/files/1333070776978.jpg Uri uri = Uri.fromFile(f); Intent share = new Intent(Intent.ACTION_SEND); share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); share.setType("image/jpeg"); share.putExtra(Intent.EXTRA_STREAM, uri); share.putExtra(Intent.EXTRA_TITLE,"Share that title"); share.putExtra(Intent.EXTRA_SUBJECT,"Share that subject"); share.putExtra(Intent.EXTRA_TEXT,"Check that out..."); share.putExtra("sms_body", "sms body"); startActivity(Intent.createChooser(share, "Share Image")); 

Guardo la imagen con

  Context.openFileOutput(fileName, Context.MODE_WORLD_READABLE); 

Mi entendimiento fue que al establecer FLAG_GRANT_READ_URI_PERMISSION, le doy a Google+ acceso específico a este archivo.

Funciona cuando almaceno la imagen en el MediaStore, pero en realidad no quiero estorbar la galería de imágenes de los usuarios.

  ContentValues values = new ContentValues(2); values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg"); values.put(MediaStore.Images.Media.DATA, f.getAbsolutePath()); Uri uri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); 

Cualquier consejo es apreciado

Simon

5 Solutions collect form web for “La intención de compartir Google+ no puede acceder a la imagen”

Google+ no puede acceder al file:// Uris desde la carpeta privada de otra aplicación. Y la FLAG_GRANT_READ_URI_PERMISSION no funciona en este caso porque es solo para Uris en la parte "data" de un Intent, pero no para extras.

Una solución común es agregarla a la galería (a través de MediaStore ) pero no es necesario hacerlo. La solución correcta en este caso es usar un FileProvider :

FileProvider es una subclase especial de ContentProvider que facilita el intercambio seguro de archivos asociados con una aplicación creando un content:// Uri para un archivo en lugar de un file:/// Uri.

Primero coloque lo siguiente en su AndroidManifest.xml

 <provider android:name="android.support.v4.content.FileProvider" android:authorities="com.myapp.testshare.fileprovider" android:grantUriPermissions="true" android:exported="false"> <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/filepaths" /> </provider> 

A continuación, este archivo en res\xml\filepaths.xml :

 <?xml version="1.0" encoding="utf-8"?> <paths> <files-path name="shared_images" path="shared_images/" /> </paths> 

A continuación, para compartir un archivo de imagen, asegúrese de que esté en la ruta especificada anteriormente (es decir, shared_images en getFilesDir() ) y construya la intención de la siguiente manera:

 File file = getImageFileToShare(); Uri fileUri = FileProvider.getUriForFile(this, "com.myapp.testshare.fileprovider", file); Intent intent = new Intent(Intent.ACTION_SEND); intent.putExtra(Intent.EXTRA_STREAM, fileUri); intent.setType("image/png"); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); startActivity(intent); 

(Asegúrese de que la autoridad especificada en el método getUriForFile() coincide con la del manifiesto).

Esto producirá un content:// Uri (como content://com.myapp.testshare.fileprovider/shared_images/img1.png que la aplicación de Google+ podrá acceder y, por lo tanto, incluir en la publicación).

Simon,

Parece que funciona para establecer el permiso después de configurar el uri.

 share.putExtra(Intent.EXTRA_STREAM, uri); share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 

Pruebe este, también estoy teniendo problemas con esto como su aparecer en la Galería si hago un inserto ..

// aquí hay una instancia de archivo

 String uriString = MediaStore.Images.Media.insertImage(getContentResolver(), out.getAbsolutePath(),null,null); intent.putExtra(Intent.EXTRA_STREAM,Uri.parse(uriString)); 

https://github.com/google-plus/google-plus-office-hours/blob/master/2012_08_14-curiosity-android-app/src/com/example/CuriosityActivity.java

Si está utilizando un ContentProvider personalizado, debe comprobar que el tipo MIME de las imágenes es correcto. El MIME correcto para un jpeg es "image / jpeg". Si devuelve "image / jpg" en el getType superado (Uri uri); Entonces Google+ no puede adjuntarlos. La mayoría de los otros trabajos, por ejemplo, mensajería y correo electrónico. "Image / jpg" NO es un tipo IANA MIME válido:

http://www.iana.org/assignments/media-types/image

La especificación de getType es clara acerca de esto, pero es muy fácil perderse (lo hice). Habiendo resuelto esto, quería asegurar que otros descubran esto porque es muy unobbious.

Puede utilizar esto:

 Drawable drawable; File file; if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.LOLLIPOP) { drawable = getResources().getDrawable(imgResId); } else { drawable = getResources().getDrawable(imgResId, null); } if (drawable != null) { Bitmap bm = ((BitmapDrawable) drawable).getBitmap(); String path = Environment.getExternalStorageDirectory() .toString(); OutputStream fOut = null; file = new File(path, "pic.jpg"); // the File to save to try { file.createNewFile(); fOut = new FileOutputStream(file); // obtaining the Bitmap bm.compress(Bitmap.CompressFormat.JPEG, 100, fOut); fOut.flush(); fOut.close(); return file; } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } 
  • ¿Es aconsejable almacenar imágenes codificadas en base64 dentro de una base de datos?
  • Cómo agregar cuadros a la imagen?
  • ¿Cómo puedo guardar mi imagen como formato BMP?
  • Android, mdpi densidad pero diferentes pantallas
  • Burbuja de discurso drawable de Android
  • Android lo que debe ser punto de pivote para girar la imagen alrededor de su centro de la base
  • Recortar la imagen directamente desde la matriz de bytes
  • Android tutorial de procesamiento de imágenes?
  • Técnica de detección de imágenes utilizada en el RAD
  • Cómo descargar y almacenar en caché el mapa de bits utilizando la biblioteca de Picasso
  • Cualquier persona que ha automatizado el funcionamiento de la cámara de móvil. ¿Alguna sugerencia donde puedo verificar la imagen capturada por la cámara?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.