我在尝试发送带有附件的电子邮件时遇到了这个错误。有帮助吗?谢谢你
****从活动上下文的外部调用startActivity()需要flag_activity_new_task标志。这真的是你想要的吗?****
这是我的代码:
[assembly: Dependency(typeof(sendEmail))]
namespace myapp.Droid
{
public class sendEmail : IEmailTask
{
public sendEmail()
{
}
public void SendEmail ()
{
var sqlliteFilname = "test.3gpp";
string documentsPath = System.Environment.GetFolderPath(
Environment.SpecialFolder.Personal);
var stringPath = Path.Combine(documentsPath, sqlliteFilname);
var path = Android.Net.Uri.FromFile(new
Java.IO.File(stringPath));
Intent emailIntent = new Intent(Intent.ActionSend);
// set the type to 'email'
emailIntent.SetData(Android.Net.Uri.Parse("mailto:"));
String[] to = { "youremail@mail.com" };
emailIntent.PutExtra(Intent.ExtraEmail, to);
// the attachment
emailIntent.PutExtra(Intent.ExtraStream, path);
// the mail subject
emailIntent.PutExtra(Intent.ExtraSubject, "Subject");
Android.App.Application.Context.StartActivity(Intent.CreateChooser(emailIntent, "Send email..."));
}
}
}
页面上的代码是:
void btnSendingHandle_Clicked(object sender, System.EventArgs e)
{
var getEmail = DependencyService.Get<IEmailTask>();
getEmail.SendEmail();
}
就像尼克所说的
一样- 您可以使用
Forms.Context
开始活动。
或
- 您可以在
emailIntent.
中添加emailIntent.SetFlags(ActivityFlags.NewTask);
在Android中,每个
Activity
都应具有自己的任务堆栈,您可以使用TaskAffition将其定义,该软件包的名称是默认值。但是,如果您使用Application.Context
开始活动,则没有用于活动的任务堆栈,因此它建议您使用FLAG_ACTIVITY_NEW_TASK
标志,此标志将为您的活动创建一个任务堆栈。
检查是否有附件要发送。*要替换为if block&amp;更改此
Intent emailIntent = new Intent(Intent.ActionSend);
//change it to
Intent emailIntent = new Intent(Intent.ActionSendto);
android.app.application.context.startactivity(Intent.CreateChooser(电子邮件),"发送电子邮件..."));
if (emailIntent.ResolveActivity(Android.App.Application.Context.PackageManager) != null)
{
Android.App.Application.Context.StartActivity(emailIntent);
}
else
{
string tag = "MY-EMAIL";
Log.Info(tag, "no attachment found");
}
我的问题依赖于附件本身。