2013-06-18 4 views
16

У меня есть этот код:Как прикрепить Bitmap при запуске ACTION_SEND намерения

Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_SEND); 
startActivity(intent); 

Какой будет успешно запустить приложение для обмена сообщениями на Android.

Но как я могу прикрепить объект Bitmap при запуске намерения?

Я прочитал http://developer.android.com/reference/Android/content/Intent.html, шкаф, к чему мне нужно EXTRA_STREAM, как это:

intent2.putExtra (Intent.EXTRA_STREAM, _uri);

Но в моем случае у меня есть ссылка объекта Bitmap, а не URI растрового изображения.

Скажите, пожалуйста, что делать, чтобы прикрепить объект Bitmap?

+0

Вы хотите отправить изображение ?? – Riser

+0

Сохраните это растровое изображение и укажите uri .... – Triode

+0

@segi :: Да, я хочу отправить изображение. – KCRaju

ответ

25
String pathofBmp = Images.Media.insertImage(getContentResolver(), bitmap,"title", null); 
    Uri bmpUri = Uri.parse(pathofBmp); 
    final Intent emailIntent1 = new Intent( android.content.Intent.ACTION_SEND); 
    emailIntent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    emailIntent1.putExtra(Intent.EXTRA_STREAM, bmpUri); 
    emailIntent1.setType("image/png"); 

Где растровый рисунок - это ваш растровый объект, который должен храниться на SD-карте. а затем использовать этот Uri для совместного использования.

+0

здесь мы получаем URI изображения с помощью растрового изображения ... правильно? – KCRaju

+0

yes, right ..... – Riser

+3

Images.Media.insertImage (getContentResolver(), bitmap, "title", null); return null –

-11
String cc=trlink.toString(); 
Intent share = new Intent(Intent.ACTION_SEND); 
share.setType("text/plain"); 
share.putExtra(Intent.EXTRA_TEXT,cc); 
startActivity(Intent.createChooser(share,"Share Text")); 
0

Попробуйте это может помочь вам:

ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
yourbitmapimagename.compress(CompressFormat.PNG, 0, bos); 
Intent intent = new Intent(); 
intent.setAction(Intent.ACTION_SEND); 
intent.setType("*/*"); 
intent.putExtra(Intent.EXTRA_STREAM, bos.toByteArray()); 
startActivity(intent); 
+5

Выбрасывает ClassCastException: «byte [] нельзя отбрасывать в android.os.Parcelable« –

+0

Мне кажется, вам нужно импортировать java.io.ByteArrayOutputStream в ваш класс. – Nas

+0

Это просто не работает. – kkazakov

20

Вы должны сначала сохранить растровое изображение в файл. вы можете сохранить его в кэш приложения

private void shareBitmap (Bitmap bitmap,String fileName) { 
    try { 
     File file = new File(getContext().getCacheDir(), fileName + ".png"); 
     FileOutputStream fOut = new FileOutputStream(file); 
     bitmap.compress(CompressFormat.PNG, 100, fOut); 
     fOut.flush(); 
     fOut.close(); 
     file.setReadable(true, false); 
     final Intent intent = new Intent( android.content.Intent.ACTION_SEND); 
     intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     intent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(file)); 
     intent.setType("image/png"); 
     startActivity(intent); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 

} 
+1

Самое важное в этом примере: 'файл.setReadable (true, false); 'без этого другие приложения (которые могут быть результатом startActivity) не смогут прочитать изображение. Все остальные ответы пренебрегли тем, что .. – micha

+0

как мы можем удалить после совместного использования? –