xamarin формы: вызов телефона и отправка электронной почты (IOS, Android и UWP) - PullRequest
0 голосов
/ 25 мая 2018

В настоящее время используется следующий код для функций звонков и электронной почты, но он работает только в Android и не работает в IOS.Кроме того, мне нужны эти функции в UWP.

Для звонка:

string phoneno = "1234567890";
Device.OpenUri(new Uri("tel:" + phoneno));

Для почты:

string email = "sreejithsree139@gmail.com";
Device.OpenUri(new Uri("mailto:" + email ));

Любой пакет доступен для этого?

Ответы [ 5 ]

0 голосов
/ 25 мая 2018

Обновление полного кода для функций звонков и рассылки с использованием Xamarin.Essentials, это может помочь другим.

Для звонков:

   try
    {
        PhoneDialer.Open(number);
    }
    catch (ArgumentNullException anEx)
    {
        // Number was null or white space
    }
    catch (FeatureNotSupportedException ex)
    {
        // Phone Dialer is not supported on this device.
    }
    catch (Exception ex)
    {
        // Other error has occurred.
    }

Для почты:

       List<string> recipients = new List<string>();
        string useremail = email.Text;
        recipients.Add(useremail);
                try
                {
                    var message = new EmailMessage
                    {
                        //Subject = subject,
                        //Body = body,
                        To = recipients
                        //Cc = ccRecipients,
                        //Bcc = bccRecipients
                    };
                    await Email.ComposeAsync(message);
                }
                catch (Exception ex)
                {
                    Debug.WriteLine("Exception:>>"+ex);
                }
0 голосов
/ 25 мая 2018

Если вы не хотите ждать Essentials Xamarin , который до сих пор находится в предварительной версии, вы можете использовать этот плагин с открытым исходным кодом .Работает на iOS, Android и UWP.Вот пример из документации github:

// Make Phone Call
var phoneDialer = CrossMessaging.Current.PhoneDialer;
if (phoneDialer.CanMakePhoneCall)
   phoneDialer.MakePhoneCall("+27219333000");

// Send Sms
var smsMessenger = CrossMessaging.Current.SmsMessenger;
if (smsMessenger.CanSendSms)
   smsMessenger.SendSms("+27213894839493", "Well hello there from Xam.Messaging.Plugin");

var emailMessenger = CrossMessaging.Current.EmailMessenger;
if (emailMessenger.CanSendEmail)
{
    // Send simple e-mail to single receiver without attachments, bcc, cc etc.
    emailMessenger.SendEmail("to.plugins@xamarin.com", "Xamarin Messaging Plugin", "Well hello there from Xam.Messaging.Plugin");

    // Alternatively use EmailBuilder fluent interface to construct more complex e-mail with multiple recipients, bcc, attachments etc.
    var email = new EmailMessageBuilder()
      .To("to.plugins@xamarin.com")
      .Cc("cc.plugins@xamarin.com")
      .Bcc(new[] { "bcc1.plugins@xamarin.com", "bcc2.plugins@xamarin.com" })
      .Subject("Xamarin Messaging Plugin")
      .Body("Well hello there from Xam.Messaging.Plugin")
      .Build();

    emailMessenger.SendEmail(email);
}
0 голосов
/ 25 мая 2018

Xamarin.Essentials ( Nuget ) доступен в виде пакета предварительного просмотра и содержит функции для открытия почтового приложения по умолчанию и прикрепления такой информации, как получатели, тема итело , а также откройте номеронабиратель телефона с определенным номером .

Существует также сообщение в блоге о Xamarin. Основные сведения доступны на blog.xamarin.com.

Редактировать: Что касается вашей проблемы с почтой, Xamarin.Essentials ожидает массив строк в качестве получателей, чтобы вы могли отправлять почту нескольким людям одновременно.Просто передайте строковый массив с одним единственным значением.

var recipients = new string[1] {"me@watercod.es"};

Если вы используете перегрузку, которая ожидает экземпляр EmailMessage, вы должны передать список строковых объектов.В этом случае должно работать следующее:

var recipients = new List<string> {"me@watercod.es"};
0 голосов
/ 25 мая 2018

В нашем приложении мы выполняем телефонный вызов с помощью DependencyService.

Поэтому в нашем PCL у нас есть

public interface IPhoneCall
{
    void Call(string number);
}

На стороне iOS следующий метод выполняет вызов:

public void Call(string number)
    {
        if (string.IsNullOrEmpty(number))
            return;
        var url = new NSUrl("tel:" + number);
        if (!UIApplication.SharedApplication.OpenUrl(url))
        {
            var av = new UIAlertView("Error",
                         "Your device does not support calls",
                         null,
                         Keys.Messages.BUTTON_OK,
                         null);
            av.Show();
        }
    }
0 голосов
/ 25 мая 2018

Привет позвонить в UWP :

if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.ApplicationModel.Calls.PhoneCallManager"))
            {
                Windows.ApplicationModel.Calls.PhoneCallManager.ShowPhoneCallUI("123", "name to call");
            }

Чтобы отправить текст:

private async void ComposeSms(Windows.ApplicationModel.Contacts.Contact recipient,
    string messageBody,
    StorageFile attachmentFile,
    string mimeType)
{
    var chatMessage = new Windows.ApplicationModel.Chat.ChatMessage();
    chatMessage.Body = messageBody;

    if (attachmentFile != null)
    {
        var stream = Windows.Storage.Streams.RandomAccessStreamReference.CreateFromFile(attachmentFile);

        var attachment = new Windows.ApplicationModel.Chat.ChatMessageAttachment(
            mimeType,
            stream);

        chatMessage.Attachments.Add(attachment);
    }

    var phone = recipient.Phones.FirstOrDefault<Windows.ApplicationModel.Contacts.ContactPhone>();
    if (phone != null)
    {
        chatMessage.Recipients.Add(phone.Number);
    }
    await Windows.ApplicationModel.Chat.ChatMessageManager.ShowComposeSmsMessageAsync(chatMessage);
}

, как в Microsoftдокументация здесь: Составление SMS-документации

==> Таким образом, вы можете сделать (если это еще не сделано) интерфейс общего сервиса в вашем Xamarinприложение, затем реализация с этими кодами в вашем приложении UWP ...


Чтобы отправить электронное письмо: Чтобы отправить электронное письмо в UWP, вы также можете обратиться к документации Microsoft: Отправить документацию по электронной почте (UWP)


Использование плагина

Иначе вы можете использовать плагин Xamarin:

...