2013-08-19 16 views
5

私は自分のアプリケーションからメールをロゴで送ろうとしています。
しかし、添付ファイルが文字列形式(pngである必要があります)のメールが届きました。
マイコード:
Androidに画像を添付してもメールが届かない

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); 

私は何をすべき?

+0

シナリオをもっと説明できますか?それは十分に明確ではありません –

+0

非常に単純な、ファイルはpng形式ではない送信されます。 – NickF

答えて

8

内部リソースから電子メールにファイルを添付することはできません。最初にSDカードのようにストレージの一般的にアクセス可能な領域にコピーする必要があります。

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...")); 

これは、アプリケーションとともにバンドルするリソースが読み取り専用であり、アプリケーションにサンドボックス化されているため必要です。電子メールクライアントが受信するURIは、アクセスできないURIです。

+0

ファイルをアセットに保つことはできますか? – NickF

+0

+1よく説明されています... @ Raghav Sood私たちはこれに対してコンテンツプロバイダーを使用できますか? –

+0

@NickFファイルを添付する前に、外部ストレージにコピーする限り、ファイルを保存することができます。 –

関連する問題