Wysyłanie wiadomości SMS (Windows Phone SDK)

W tym poście znajdziesz informacje jak komponować (wysyłać) wiadomości SMS w Windows Phone. Opisuję tu:

  • proste wysyłanie SMS’a do jednego odbiorcy
  • wybieranie odbiorcy z listy kontaktów w telefonie
  • wysyłanie SMS’a do wielu odbiorców

Zapraszam do czytania i komentowania.

Wyślij SMS

Jak wysłać SMS z Windows Phone to chyba każdy wie. Masz przycisk w aplikacji i na zdarzeniu Click wywołujesz poniższy kawałek kodu.

private void SendSMS_Click(object sender, RoutedEventArgs e)
{
	var composeSMS = new SmsComposeTask();
	composeSMS.Body = "Hello Chris!";
	composeSMS.To = "(206)5550003"; // Chris
	composeSMS.Show();
}

Uruchomi się dialog wysyłania wiadomości, gdzie można zmienić wiadomość, dodać odbiorców i wysłać.

Wyślij SMS do kontaktu

Przykład ten można bardziej rozwinąć i zamiast wpisywania na sztywno numeru telefonu, można go skądś pobrać, na przykład z listy naszych kontaktów:

private void ChooseAndSendSMS_Click(object sender, RoutedEventArgs e)
{
	var chooseNumberTask = new PhoneNumberChooserTask();
	chooseNumberTask.Completed += PhoneOnCompleted;
	chooseNumberTask.Show();
}

private void PhoneOnCompleted(object sender, PhoneNumberResult phoneNumberResult)
{
	var composeSMS = new SmsComposeTask();
	composeSMS.Body = string.Format("Hello {0}!", phoneNumberResult.DisplayName);
	composeSMS.To = phoneNumberResult.PhoneNumber;
	composeSMS.Show();
}

Powyższy przykład najpierw odpali PhoneNumberChooser‚a by wyświetlić listę kontaktów, z której wybieramy odbiorcę. Następnie odczytujemy numer telefonu i nr nazwę wybranego kontaktu i można ponownie jak w pierwszym przykładzie wysłać SMS’a przy użyciu SmsComposeTask.

 SMS wybieranie kontaktu SMS wyślij wiadomość

Wyślij SMS do wielu odbiorców

Ale ostatnio stanąłem przed problemem jak wysłać SMS’a z Windows Phone do wielu odbiorców. Podejrzewałem, że jest to możliwe, ponieważ numer odbiorcy SMS jest typu string (a nie int). Wiec może da się jakoś rozdzielić te numery separatorem. I tutaj podziękowania dla Maćka Grabka, który potwierdził, że po pierwsze da się to zrobić, a po drugie separatorem jest po prostu przecinek. Przykład poniżej:

private void SendSMSToMany_Click(object sender, RoutedEventArgs e)
{
	var composeSMS = new SmsComposeTask();
	composeSMS.Body = "Hello Chris and Roan!";
	composeSMS.To = "(206)5550003,(425)5550004"; // Chris, Roan
	composeSMS.Show();
}

SMS wielu odbiorców

Uwagi

  • Nie da się wysłać SMS w tle, bez zgody użytkownika
  • My z poziomu kodu możemy przygotować SMS do wysłania (za pomocą SmsComposeTask. Po wywołaniu metody Show(), wychodzimy z aplikacji i kontrolę przejmuje system operacyjny. Użytkownik zobaczy na ekranie treść wiadomości i numery telefonów odbiorców (jeśli numery występują w jego książce telefonicznej wówczas zostaną zamienione na nazwy kontaktów – tak się dzieje na fizycznym telefonie, emulator sobie z tym nie radzi). Użytkownik może zmienić treść wiadomości, może zmienić listę odbiorców oraz może zdecydować, że nie wyśle wiadomości, a co najgorsze… Ty się o tym nie dowiesz. Metoda Show() zwraca void, i nie ma żadnego callbacku.
  • Nie sprawdzałem jaki jest limit ilości odbiorców wiadomości
Advertisements