2017-12-07 1 views
0

첨부 파일이있는 전자 메일을 보낼 때이 오류가 발생했습니다. 어떤 도움? 감사합니다종속성 서비스를 사용하여 전자 메일 + 첨부 파일 보내기 DROID Xamarin forms

**** 활동 컨텍스트 외부에서 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 = { "[email protected]" }; 

      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(); 
     } 
+0

양식 응용 프로그램이므로 Context를 Forms.Context.StartActivity (Intent.CreateChooser (emailIntent, "Send email ..."));로 변경하려고합니다. – Nick

답변

0

보낼 첨부 파일이 있는지 확인하십시오. * 블록이

Intent emailIntent = new Intent(Intent.ActionSend); 
//change it to 


Intent emailIntent = new Intent(Intent.ActionSendto); 

Android.App.Application.Context.StartActivity 변경 & 경우에 대한 교체가 될하기 위해 (Intent.CreateChooser (emailIntent "이메일 보내기 ..."));

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

제 문제는 첨부 파일 자체에 달려 있습니다.

0

  • 을 말했다 Forms.Context을 사용하면 활동을 시작할 수 있습니다.

또는

  • 당신이 emailIntent.SetFlags(ActivityFlags.NewTask);을 추가 할 수 있습니다 귀하의 emailIntent.

안드로이드, 모든 Activity는, 패키지의 그것을 정의하는 taskAffinity를 사용하여 자신의 작업 스택을 가져야한다 name이 기본값입니다. 그러나 Application.Context을 사용하여 활동을 시작한 경우 활동에 대한 태스크 스택이 없으므로 FLAG_ACTIVITY_NEW_TASK 플래그를 사용하는 것이 좋습니다.이 플래그는 활동을 위해 태스크 스택을 작성합니다.

+0

답장을 보내 주셔서 감사합니다. 두 솔루션을 모두 시도했지만 여전히 동일한 오류가 발생합니다. Forms.context, Android.App.Application.Context.StartActivity (Intent.CreateChooser (emailIntent, "Send email ..."))를 추가 할 수있는 옵션이 없습니다. – Pxaml

+0

정확히 어디에서이 작업을 호출해야합니까? emailIntent.SetFlags (ActivityFlags.NewTask); – Pxaml

+0

'Forms.context'가 아니고,'Forms.Context'이고, 그것이'Xamarin.Forms.Forms.Context'이고 [이것은 Android의 태스크 스택에 대한 문서입니다] (https://developer.android .com/guide/components/activities/tasks-and-back-stack.html), [이것은 Android의 오류에 관한 것입니다] (https://stackoverflow.com/questions/3918517/calling-startactivity-from-outside- 활동 - 문맥의) –

관련 문제