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();
}
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"/>
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
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
}