it-swarm.com.de

Senden einer E-Mail mit Anhängen unter Android

Ich möchte eine Schaltfläche implementieren, durch die der Standard-E-Mail-Client mit einer Anhangsdatei geöffnet wird.

Ich folge this , erhalte aber eine Fehlermeldung über die startActivity und sage, es erwarte einen Aktivitätsparameter, während ich ihm eine Absicht gebe .. Ich benutze API 21 und Android Studio 1.1.0, also Vielleicht hat es etwas mit dem Kommentar in der Antwort im Link zu tun?

Dies ist mein vierter Tag als Android-Entwickler. Es tut mir leid, wenn mir etwas wirklich grundlegendes fehlt.

Hier ist mein Code:

    public void sendFileToEmail(File f){

    String subject = "Lap times";
    ArrayList<Uri> attachments = new ArrayList<Uri>();
    attachments.add(Uri.fromFile(f));
    Intent intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
    intent.putExtra(Intent.EXTRA_SUBJECT, subject);
    intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, attachments);
    intent.setClassName("com.Android.email", "com.Android.mail.compose.ComposeActivity");

    try {
        startActivity(intent);
    } catch (ActivityNotFoundException e) {
        e.printStackTrace();
    }
14
Digital Da

Ich denke, Ihr Problem ist, dass Sie nicht den richtigen Dateipfad verwenden.

Folgendes funktioniert für mich:

Intent emailIntent = new Intent(Intent.ACTION_SEND);
emailIntent.setType("text/plain");
emailIntent.putExtra(Intent.EXTRA_EMAIL, new String[] {"[email protected]"});
emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject here");
emailIntent.putExtra(Intent.EXTRA_TEXT, "body text");
File root = Environment.getExternalStorageDirectory();
String pathToMyAttachedFile = "temp/attachement.xml";
File file = new File(root, pathToMyAttachedFile);
if (!file.exists() || !file.canRead()) {
return;
}
Uri uri = Uri.fromFile(file);
emailIntent.putExtra(Intent.EXTRA_STREAM, uri);
startActivity(Intent.createChooser(emailIntent, "Pick an Email provider"));

Sie müssen dem Benutzer auch die Berechtigung über eine Manifestdatei (siehe unten) erteilen 

<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
27
King of Masses

Versuchen Sie, dies zu verwenden. Es funktioniert ...

Intent emailIntent = new Intent(Android.content.Intent.ACTION_SEND); 
                    emailIntent.setType("*/*");

                    emailIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(new File(listVideos.get(position).getVideoPath())));//path of video 
                    startActivity(Intent.createChooser(emailIntent, "Send mail..."));

Vielen Dank

2
Sulabh Jain

Bei neueren Geräten stoßen Sie auf FileUriExposedException. So vermeiden Sie es in Kotlin.

val file = File(Environment.getExternalStorageDirectory(), "this")
val authority = context.packageName + ".provider"
val uri = FileProvider.getUriForFile(context, authority, file)
val emailIntent = createEmailIntent(uri)
startActivity(Intent.createChooser(emailIntent, "Send email..."))

private fun createEmailIntent(attachmentUri: Uri): Intent {
    val emailIntent = Intent(Intent.ACTION_SEND)
    emailIntent.type = "vnd.Android.cursor.dir/email"
    val to = arrayOf("[email protected]")
    emailIntent.putExtra(Intent.EXTRA_EMAIL, to)
    emailIntent.putExtra(Intent.EXTRA_STREAM, attachmentUri)
    emailIntent.putExtra(Intent.EXTRA_SUBJECT, "subject")
    return emailIntent
}
1
divonas