2013-08-19 19 views
5

Uygulamamdan logolu bir e-posta göndermeye çalışıyorum.
Ancak eki dize biçiminde olduğunda e-postayı aldım (png olmalıdır).
Kodum:
Android e-posta resmine çalışmıyor çalışmıyor

Intent intent = new Intent(Intent.ACTION_SEND); 
    intent.setType("application/image"); 

    intent.putExtra(Intent.EXTRA_SUBJECT, subject); 
    intent.putExtra(Intent.EXTRA_TEXT, getString(R.string.fb_share_description)); 
    intent.putExtra(Intent.EXTRA_STREAM, Uri.parse("android.resource://my.package/" + R.drawable.ic_launcher)); 
    Intent chooser = Intent.createChooser(intent, "share"); 
    startActivity(chooser); 

ne yapmalıyım?

+0

Senaryoyu daha fazla açıklayabilir misiniz? Yeterince net değil –

+0

Çok basit, dosya png formatında gönderilmez. – NickF

cevap

8

Dahili kaynaklardan bir e-postaya dosya ekleyemezsiniz. Önce SD Kart gibi yaygın olarak erişilebilen bir depolama alanına kopyalamanız gerekir.

InputStream in = null; 
OutputStream out = null; 
try { 
    in = getResources().openRawResource(R.drawable.ic_launcher); 
    out = new FileOutputStream(new File(Environment.getExternalStorageDirectory(), "image.png")); 
    copyFile(in, out); 
    in.close(); 
    in = null; 
    out.flush(); 
    out.close(); 
    out = null; 
} catch (Exception e) { 
    Log.e("tag", e.getMessage()); 
    e.printStackTrace(); 
} 


private void copyFile(InputStream in, OutputStream out) throws IOException { 
    byte[] buffer = new byte[1024]; 
    int read; 
    while ((read = in.read(buffer)) != -1) { 
     out.write(buffer, 0, read); 
    } 
} 

//Send the file 
Intent emailIntent = new Intent(Intent.ACTION_SEND); 
emailIntent.setType("text/html"); 
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "File attached"); 
Uri uri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "image.png")); 
emailIntent.putExtra(Intent.EXTRA_STREAM, uri); 
startActivity(Intent.createChooser(emailIntent, "Send mail...")); 

Bu, uygulamanızla paketlediğiniz kaynaklar yalnızca okunur ve uygulamanız için korumalı olduğu için gereklidir. E-posta istemcisinin aldığı URI, erişemediği bir tanesidir.

+0

Dosyayı varlıklarda saklayabilir miyim? – NickF

+0

+1 iyi açıkladı ... @ Raghav Sood Bunun için içerik sağlayıcıları kullanabilir miyiz? –

+0

@NickF Dosyayı, eklemeden önce harici depolama birimine kopyaladığınız sürece istediğiniz yerde saklayabilirsiniz. –