Maui 教學 – Maui通訊功能包含以下四個主要的功能, Maui Contacts, Maui Email, Maui Phone dialer 及 Maui SMS.
- Contacts即是電話的通訊錄.
- Email 就是用C# Code 去開啓及寄出電話上預設的Email App.
- Phone dialer 為電話卡打出電話的功能.
- SMS 為利用電話卡上的SMS服務的功能.
四種功能的應用範圍 – Contacts, Email. Phone Dialer, SMS
使用此四種功能的地方可以很多. 例如:
- 以App版面向員工發記錄, 員工管理系統的員工電話記錄, 可以在考勤記錄上加上打電話致員工, 利用SMS寄出固定的訊息, 巳發在銀行上發工資的訊息等.
- 可以在app上加入email, call的功能, 方便客戶即時查詢.
- 經理, 業務員用App的Function向客人用SMS, Email發Message, 如新年賀詞, 聖誕速銷的消息等.
四種功能的好處 – Contacts, Email. Phone Dialer, SMS
- Maui的通訊功能有一個的好處, 就是程式碼短而簡單, 只需一段五到十行程式碼就可完成一個動作, 免卻大量的CODING.
- 另一個好處為可以自動化, 可以在App做如某些事後, 更改(加入) 電話的通訊錄, 用App完成某個邏輯後, 可以自動寄出相寄出相關的SMS.
在這篇文章中, 我會介紹四個主要功能及提供他們的Code, 並附上例子. Let’s Code.
Contacts
Android |
AssemblyInfo.cs – 加入以下程式碼 |
[assembly: UsesPermission(Android.Manifest.Permission.ReadContacts)] |
AndroidManifest.xml – 加入以下程式碼 |
<uses-permission android:name=”android.permission.READ_CONTACTS” /> |
IOS / Mac |
Platforms/iOS/Info.plist – 加入以下程式碼 Platforms/MacCatalyst/Info.plist – 加入以下程式碼 |
<key>NSContactsUsageDescription</key> <string>This app needs access to contacts to pick a contact and get info.</string> |
Windows |
Platforms/Windows/Package.appxmanifest – 加入以下程式碼 |
在node <Capabilities> 內, 加入 <uap:Capability Name=”contacts”/> |
Code |
獲得整個通訊錄內的資料 |
var contacts = await Contacts.Default.GetAllAsync(); if (contacts == null) return; foreach (var contact in contacts){ string id = contact.Id; string namePrefix = contact.NamePrefix; string givenName = contact.GivenName; string middleName = contact.MiddleName; string familyName = contact.FamilyName; string nameSuffix = contact.NameSuffix; string displayName = contact.DisplayName; List<ContactPhone> phones = contact.Phones; // List of phone numbers List<ContactEmail> emails = contact.Emails; // List of email addresses } |
* PickContactAsync (method用作只拿一個Contact的資料) |
Android |
Platforms/Android/AndroidManifest.xml – 加入以下程式碼 |
<queries> <intent> <action android:name=”android.intent.action.SENDTO” /> <data android:scheme=”mailto” /> </intent> </queries> |
IOS / Mac |
Platforms/iOS/Info.plist – 加入以下程式碼 Platforms/MacCatalyst/Info.plist – 加入以下程式碼 |
<key>LSApplicationQueriesSchemes</key> <array> <string>mailto</string> </array> |
Code |
以查詢訂單為例子 |
if (Email.Default.IsComposeSupported) { string subject = “對訂單編號RX790087654進貨進度查詢”; string body = “我在1/11/2022 3:45:00下了單, 至今還未送至, 請跟進並回覆進度”; string[] recipients = new[] { “peterlau@hotmail.com”, “jprogramstudy@gmail.com” }; //把資料填入至EmailMessage var message = new EmailMessage { Subject = subject, Body = body, BodyFormat = EmailBodyFormat.PlainText, To = new List<string>(recipients) }; //加入電郵附件 – 訂單 string picturePath = Path.Combine(FileSystem.CacheDirectory, “invoice_RX790087654.pdf”); message.Attachments.Add(new EmailAttachment(picturePath)); //把電郵轉至手機預設的電郵App await Email.Default.ComposeAsync(message); } |
Phone dialer
Android |
AndroidManifest.xml – 加入以下程式碼 |
<queries> <intent> <action android:name=”android.intent.action.DIAL” /> <data android:scheme=”tel”/> </intent> </queries> |
Code |
把電話號碼轉至手機的電話系統撥出 |
if (PhoneDialer.Default.IsSupported) //把電話號碼轉至手機的電話系統撥出 PhoneDialer.Default.Open(“000-000-0000”); |
SMS
Android |
AndroidManifest.xml – 加入以下程式碼 |
<queries> <intent> <action android:name=”android.intent.action.VIEW” /> <data android:scheme=”smsto”/> </intent> </queries> |
Code |
把訊息轉至手機的SMS系統發送 |
if (Sms.Default.IsComposeSupported) { string[] recipients = new[] { “000-000-0000” }; string text = “請於1/9/2021 9:00 準時返回學校.”; var message = new SmsMessage(text, recipients); //把訊息轉至手機的SMS系統發送 await Sms.Default.ComposeAsync(message); } |
例子: Boardcast SMS, Contacts內新年快樂祝福語 |
string text = “{0} – 新年快樂!!!!! Happy New Year!!!!!”; var contacts = await Contacts.Default.GetAllAsync(); if (contacts == null) return; foreach (var contact in contacts){ if(contact.Phones.count() > 0) string message = string.Format(text, contact.GivenName); await Sms.Default.ComposeAsync(message); |
參考資料: https://docs.microsoft.com/en-us/dotnet/maui/