Совместное изображение с намерением Android

Я пытаюсь поделиться имиджом с таким же умыслом:

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); sharingIntent.setType("image/png"); sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, application.getString(R.string.app_name)); sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT,application.getString(R.string.app_share_message)); File image = new File(Uri.parse("android.resource://" + C.PROJECT_PATH + "/drawable/" + R.drawable.icon_to_share).toString()); sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(image)); shareMe(sharingIntent); 

Утрата доли срабатывает правильно, и я выбираю Gmail, все работает как ожидается, пока я не нажму кнопку send. Я получаю уведомление «Невозможно показать прикрепление», и электронное письмо отправляется без него … Почему?

Спасибо за ваше время.

Во-первых, нет гарантии, что какое-либо другое приложение сможет поддерживать android:resource// Uri . У вас будет больше совместимости с файлом на внешнем хранилище или с помощью ContentProvider .

При этом замените:

 File image = new File(Uri.parse("android.resource://" + C.PROJECT_PATH + "/drawable/" + R.drawable.icon_to_share).toString()); sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(image)); 

с:

  sharingIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://" + C.PROJECT_PATH + "/drawable/" + R.drawable.icon_to_share); 

android:resource:// не является File , и, вероятно, вы испортили свой Uri , преобразовывая его в File а затем обратно в Uri .

BitmapDrawable bitmapDrawable = (BitmapDrawable) ImageView.getDrawable (); Bitmap bitmap = bitmapDrawable.getBitmap ();

  // Save this bitmap to a file. File cache = getApplicationContext().getExternalCacheDir(); File sharefile = new File(cache, "toshare.png"); Log.d("share file type is", sharefile.getAbsolutePath()); try { FileOutputStream out = new FileOutputStream(sharefile); bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); out.flush(); out.close(); } catch (IOException e) { Log.e("ERROR", String.valueOf(e.getMessage())); } // Now send it out to share Intent share = new Intent(android.content.Intent.ACTION_SEND); share.setType("image/*"); share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + sharefile)); startActivity(Intent.createChooser(share, "Share Image")); 

В моем случае я использовал:

 Uri imageUri = Uri.parse("android.resource://com.examle.tarea/" + R.drawable.tienda_musica); Intent intent = new Intent(); intent.setAction(Intent.ACTION_SEND); intent.setType("image/jpeg"); intent.putExtra(Intent.EXTRA_STREAM, imageUri); startActivity(Intent.createChooser(intent, getString(R.string.action_share))); 

// откройте узел выбора общего доступа (покажет установленное приложение, из которого я могу поделиться // изображениями)

Private void shareImage (String imagePath, String quoteByPerson, String quoteToShare) {

  Intent share = new Intent(Intent.ACTION_SEND); share.setType("image/*"); // String imagePath = Environment.getExternalStorageDirectory() + // "/myImage.png"; File imageFileToShare = new File(imagePath); Uri uri = Uri.fromFile(imageFileToShare); share.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); share.putExtra(Intent.EXTRA_TEXT, "Quote of the day-:" + "\n" + quoteToShare + "\n" + quoteByPerson); share.putExtra(android.content.Intent.EXTRA_TITLE, "Quote of the day-:"); if (imagePath.contains("android.resource://")) { Uri imageUri = Uri.parse(imagePath); share.putExtra(Intent.EXTRA_STREAM, imageUri); } else { share.putExtra(Intent.EXTRA_STREAM, uri); } startActivity(Intent.createChooser(share, "Share inspiration via...")); }