3

我正在尝试发送带有 Android 意图的 .png 文件。我已尝试将此文件保存在具有 WorldReadable 权限的内部存储中,现在已保存到外部存储中。当我打开 GMail 客户端时,我的附件就在那里。但是,在 Microsoft Exchange 或 Outlook 应用程序中,附件不会出现,我必须手动添加它。

我正在使用 Xamarin.Android (MonoDroid),但任何 Java 解决方案也会有所帮助。这是我发送带有意图的电子邮件的代码。

        Intent intent = new Intent(Intent.ACTION_SENDTO);
        intent.setType("image/png"); // I also tried 'application/image'
        intent.setData(Android.Net.Uri.Parse("mailto:" + address ?? string.Empty));

        if (!string.isNullOrEmpty (attachment)) {
            intent.putExtra (Android.Content.Intent.EXTRA_STREAM, Android.Net.Uri.fromFile(new Java.IO.File (Android.OS.Environment.getExternalStorageDirectory(), attachment)));
        }

        try {
            _Context.startActivity(intent);
        }catch(ActivityNotFoundException anfe) {

            //Show prompt
        }

我不确定为什么附件只显示在 GMail 中。我需要内容提供商吗?奇怪的是它只出现在 GMail 中而不是任何其他邮件应用程序中。

4

3 回答 3

2

您不需要 ContentProvider。

我在发送 JPEG 时做的基本相同,但使用Intent.ActionSend而不是Intent.ActionSendTo.

于 2013-10-04T02:26:24.600 回答
0
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
    {
        bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.cstand);
        File sdCard = Environment.getExternalStorageDirectory();
        System.out.println("PATH : "+sdCard);
        File dir = new File(sdCard.getAbsolutePath() + "/Salary/Documents/Email");//#2

        dir.mkdirs();
        File file = new File(dir, "Document.png");

        try 
        {
            output = new FileOutputStream(file);
            bitmap.compress(Bitmap.CompressFormat.PNG, 100, output);
            output.flush();
            output.close();
            String subject = "Document" ;
            String message = "Please, see the attcahed document";

            //FOR EMAIL
            Intent email = new Intent(Intent.ACTION_SENDTO, Uri.fromParts("mailto", "", null));
            email.putExtra(Intent.EXTRA_SUBJECT, subject);
            Uri uri = Uri.fromFile(file);
            email.putExtra(Intent.EXTRA_STREAM, uri);
            email.putExtra(Intent.EXTRA_TEXT, message);
            startActivity(Intent.createChooser(email, "Choose any Email:"));

            }
        catch (android.content.ActivityNotFoundException ex)
        {
            Toast.makeText(MainActivity.this, "There are no email clients installed.", Toast.LENGTH_SHORT).show();
        } 
        catch (FileNotFoundException e)
        {
            e.printStackTrace();
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
    }
于 2015-05-04T14:41:50.373 回答
0

尝试使用 ActionSendMultiple Intent: Intent(Intent.ActionSendMultiple)

对于附件使用PutParcelableArrayListExtra(Intent.ExtraStream, uris)where uris 变量是List<IParcelable>().

这是一个例子:

var email = new Intent(Intent.ActionSendMultiple);
    email.SetType("text/plain");
    email.PutExtra(Intent.ExtraEmail, new string[]{emailTo});
    email.PutExtra(Intent.ExtraCc, new string[]{emailCC});

    var uris = new List<IParcelable>();
    filePaths.ForEach(file=> {
        var fileIn = new File(file);
        var uri = Android.Net.Uri.FromFile(fileIn);
        uris.Add(uri);
    });

    email.PutParcelableArrayListExtra(Intent.ExtraStream, uris);

    context.StartActivity(Intent.CreateChooser(email, "Send mail..."));

希望这可以帮助 ;)

于 2016-09-13T07:17:34.350 回答