2017-08-29 91 views
2

在Xamarin.Forms如果你想通過點擊一個標籤的鏈接打開設備的默認瀏覽器,這很簡單,因爲這:Xamarin.Forms如何打開設備上的默認電子郵件客戶端?

private void WebUrl_TapGestureRecognizer_Tapped(object sender, EventArgs e) 
{ 
    var label = sender as Label; 

    string url = "http://" + label.Text; 

    Device.OpenUri(new Uri(url)); 
} 

有一個類似的簡單方式與打開設備的默認電子郵件客戶端用電子郵件地址打開NewMessage?

private void EmailClient_TapGestureRecognizer_Tapped(object sender, EventArgs e) 
{ 
    var label = sender as Label; 

    // what goes here? 
} 

謝謝。

回答

5

與嘗試:

var address = "[email protected]"; 
Device.OpenUri(new Uri($"mailto:{address}")); 

希望這helps.-

+0

Android模擬器說:'不支持的操作 - 該操作目前不支持。' – PaxForce

+2

檢查您是否在模擬器中配置了郵件客戶端,並嘗試使用真實設備。 – apineda

+0

當然可以。感謝名單。 – PaxForce

0

實際上我用一個依存服務,使我有過什麼,我可以向郵件客戶端更多的控制。

首先我創建了一個接口供被稱爲IEmailService的依賴性服務使用。

public interface IEmailService 
{ 
    void CreateEmail(List<string> emailAddresses, List<string> ccs, string subject, string body, string htmlBody); 
} 

我的依存服務的Android看起來是這樣的:

[assembly: Xamarin.Forms.Dependency(typeof(EmailService))] 
namespace Droid.Services 
{ 
    public class EmailService : IEmailService 
    { 
     public void CreateEmail(List<string> emailAddresses, List<string> ccs, string subject, string body, string htmlBody) 
     { 
      var email = new Intent(Android.Content.Intent.ActionSend); 

      if (emailAddresses?.Count > 0) 
      { 
       email.PutExtra(Android.Content.Intent.ExtraEmail, emailAddresses.ToArray()); 
      } 

      if (ccs?.Count > 0) 
      { 
       email.PutExtra(Android.Content.Intent.ExtraCc, ccs.ToArray()); 
      } 

      email.PutExtra (Android.Content.Intent.ExtraSubject, subject); 

      email.PutExtra (Android.Content.Intent.ExtraText, body); 

      email.PutExtra (Android.Content.Intent.ExtraHtmlText, htmlBody); 



      email.SetType ("message/rfc822"); 

      MainActivity.SharedInstance.StartActivity(email); 

     } 
    } 
} 

對於iOS:

[assembly: Xamarin.Forms.Dependency(typeof(EmailService))] 
namespace iOS.Services 
{ 
    public class EmailService : NSObject, IEmailService, IMFMailComposeViewControllerDelegate 
    { 


     public void CreateEmail(List<string> emailAddresses, List<string> ccs, string subject, string body, string htmlBody) 
     { 
      var vc = new MFMailComposeViewController(); 
      vc.MailComposeDelegate = this; 

      if(emailAddresses?.Count > 0) 
      { 
       vc.SetToRecipients(emailAddresses.ToArray()); 
      } 

      if(ccs?.Count > 0) 
      { 
       vc.SetCcRecipients(ccs.ToArray()); 
      } 

      vc.SetSubject(subject); 
      vc.SetMessageBody(htmlBody, true); 
      vc.Finished += (sender, e) => 
      { 
       vc.DismissModalViewController(true); 
      }; 



      UIApplication.SharedApplication.Windows[0]. 
       RootViewController.PresentViewController(vc, true, null); 

     } 


    } 
} 

然後我就可以把這個在我的代碼:

DependencyService.Get<IEmailService>().CreateEmail(recipients, ccs, subject, body, bodyHtml); 

這將打開每個郵件客戶端帶有to,subject和body字段的平臺可以選擇性地出現。

我希望有幫助。

+0

這可能會起作用,但對於我目前的技能水平而言,這太高級了。我決定接受一個更簡單的答案。不管怎樣,謝謝你。 – PaxForce

相關問題