本演練示範如何建立将使用者輸入的字母數字電話号碼轉換為數字電話号碼的應用程式,并調用該号碼。 最終的應用如下所示:

建立Phoneword應用程式如下:
- 在“開始”螢幕中,啟動Visual Studio。 這将打開起始頁:
Xamarin.Forms快速入門 - 在Visual Studio中,單擊建立新項目...以建立新項目:
Xamarin.Forms快速入門 - 在“建立項目”對話框中,單擊“跨平台”,選擇“跨平台應用程式(Xamarin.Forms或Native)”模闆,将名稱和解決方案名稱設定為Phoneword,為項目選擇合适的位置,然後單擊确定按鈕:
Xamarin.Forms快速入門 - 在“新跨平台應用程式”對話框中,單擊空白應用程式,選擇Xamarin.Forms作為UI技術,選擇便攜式類庫(PCL)作為代碼共享政策,然後單擊确定按鈕:
Xamarin.Forms快速入門 - 在新的通用Windows項目對話框中,選擇通用Windows平台(UWP)應用程式将支援的目标和最低版本的Windows 10:
Xamarin.Forms快速入門 - 在解決方案資料總管中,右鍵單擊Phoneword解決方案,然後選擇Manage NuGet Packages for Solution ...:
Xamarin.Forms快速入門 - 在“管理軟體包解決方案”對話框中,選擇更新頁籤,選擇Xamarin.Forms軟體包,并将軟體包更新為最新的穩定版本:
Xamarin.Forms快速入門 - 在解決方案資料總管中,在Phoneword項目中,輕按兩下MainPage.xaml打開它:
Xamarin.Forms快速入門 -
在MainPage.xaml中,删除所有的模闆代碼,并将其替換為以下代碼。 該代碼聲明性地定義了頁面的使用者界面:
點選(此處)折疊或打開
- ?xml version="1.0" encoding="UTF-8"?>
- ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
- xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
- x:Class="Phoneword.MainPage">
- ContentPage.Padding>
- OnPlatform x:TypeArguments="Thickness">
- On Platform="iOS" Value="20, 40, 20, 20" />
- On Platform="Android, WinPhone, Windows" Value="20" />
- /OnPlatform>
- /ContentPage.Padding>
- StackLayout>
- Label Text="Enter a Phoneword:" />
- Entry x:Name="phoneNumberText" Text="1-855-XAMARIN" />
- Button x:Name="translateButon" Text="Translate" Clicked="OnTranslate" />
- Button x:Name="callButton" Text="Call" IsEnabled="false" Clicked="OnCall" />
- /StackLayout>
- /ContentPage>
- 在解決方案資料總管中,展開MainPage.xaml并輕按兩下MainPage.xaml.cs将其打開:
Xamarin.Forms快速入門 -
在MainPage.xaml.cs中,删除所有模闆代碼,并将其替換為以下代碼。 OnTranslate和OnCall方法将分别在使用者界面中單擊Translate和Call按鈕時執行:
點選(此處)折疊或打開
- using System;
- using Xamarin.Forms;
- namespace Phoneword
- {
- public partial class MainPage : ContentPage
- {
- string translatedNumber;
- public MainPage ()
- {
- InitializeComponent ();
- }
- void OnTranslate (object sender, EventArgs e)
- {
- translatedNumber = Core.PhonewordTranslator.ToNumber (phoneNumberText.Text);
- if (!string.IsNullOrWhiteSpace (translatedNumber)) {
- callButton.IsEnabled = true;
- callButton.Text = "Call " + translatedNumber;
- } else {
- callButton.IsEnabled = false;
- callButton.Text = "Call";
- }
- }
- async void OnCall (object sender, EventArgs e)
- {
- if (await this.DisplayAlert (
- "Dial a Number",
- "Would you like to call " + translatedNumber + "?",
- "Yes",
- "No")) {
- var dialer = DependencyService.GetIDialer> ();
- if (dialer != null)
- dialer.Dial (translatedNumber);
- }
- }
- }
- }
注意:此時嘗試建構應用程式将導緻稍後修複的錯誤。
通過按CTRL+S将更改儲存到MainPage.xaml.cs,然後關閉檔案。
- 在解決方案資料總管中,展開App.xaml并輕按兩下App.xaml.cs打開它:
Xamarin.Forms快速入門 -
在App.xaml.cs中,删除所有的模闆代碼,并将其替換為以下代碼。 App構造函數隻需将MainPage類設定為應用程式啟動時将顯示的頁面:
點選(此處)折疊或打開
- using Xamarin.Forms;
- using Xamarin.Forms.Xaml;
- [assembly: XamlCompilation(XamlCompilationOptions.Compile)]
- namespace Phoneword
- {
- public partial class App : Application
- {
- public App()
- {
- InitializeComponent();
- MainPage = new MainPage();
- }
- protected override void OnStart()
- {
- // Handle when your app starts
- }
- protected override void OnSleep()
- {
- // Handle when your app sleeps
- }
- protected override void OnResume()
- {
- // Handle when your app resumes
- }
- }
- }
- 在解決方案資料總管中,右鍵單擊Phoneword項目,然後選擇添加>建立項目...:
Xamarin.Forms快速入門 - 在添加新項目對話框中,選擇Visual C#>代碼>類,命名新檔案PhoneTranslator,然後單擊添加按鈕:
Xamarin.Forms快速入門 -
在PhoneTranslator.cs中,删除所有的模闆代碼,并将其替換為以下代碼。 這段代碼将把手機字詞翻譯成電話号碼:
點選(此處)折疊或打開
- using System.Text;
- namespace Core
- {
- public static class PhonewordTranslator
- {
- public static string ToNumber(string raw)
- {
- if (string.IsNullOrWhiteSpace(raw))
- return null;
- raw = raw.ToUpperInvariant();
- var newNumber = new StringBuilder();
- foreach (var c in raw)
- {
- if (" -0123456789".Contains(c))
- newNumber.Append(c);
- else
- {
- var result = TranslateToNumber(c);
- if (result != null)
- newNumber.Append(result);
- // Bad character?
- else
- return null;
- }
- }
- return newNumber.ToString();
- }
- static bool Contains(this string keyString, char c)
- {
- return keyString.IndexOf(c) >= 0;
- }
- static readonly string[] digits = {
- "ABC", "DEF", "GHI", "JKL", "MNO", "PQRS", "TUV", "WXYZ"
- };
- static int? TranslateToNumber(char c)
- {
- for (int i = 0; i digits.Length; i++)
- {
- if (digits[i].Contains(c))
- return 2 + i;
- }
- return null;
- }
- }
- }
- In Solution Explorer, right click on the Phoneword project and select Add > New Item...:在解決方案資料總管中,右鍵單擊Phoneword項目,然後選擇添加>建立項...:
Xamarin.Forms快速入門 - In the Add New Item dialog, select Visual C# > Code > Interface, name the new file IDialer, and click the Add button:在添加新項目對話框中,選擇Visual C#>代碼>接口,命名新檔案IDialer,然後單擊添加按鈕:
Xamarin.Forms快速入門 -
在IDialer.cs,中,删除所有的模闆代碼,并将其替換為以下代碼。 該代碼定義了一個撥号方式,必須在每個平台上實作撥号翻譯的電話号碼:
點選(此處)折疊或打開
- namespace Phoneword
- {
- public interface IDialer
- {
- bool Dial(string number);
- }
- }
該應用程式的通用代碼現已完成。 平台專用電話撥号器代碼現在将作為DependencyService實作。
- 在解決方案資料總管中,右鍵單擊Phoneword.iOS項目,然後選擇添加>建立項...:
Xamarin.Forms快速入門 - 在“添加新項目”對話框中,選擇“Apple”>“代碼”>“類”,為新的檔案名稱指定PhoneDialer,然後單擊“添加”按鈕:
Xamarin.Forms快速入門 -
在PhoneDialer.cs中,删除所有的模闆代碼,并将其替換為以下代碼。 此代碼建立将在iOS平台上使用的撥号方式撥打已翻譯的電話号碼:
點選(此處)折疊或打開
- using Foundation;
- using Phoneword.iOS;
- using UIKit;
- using Xamarin.Forms;
- [assembly: Dependency(typeof(PhoneDialer))]
- namespace Phoneword.iOS
- {
- public class PhoneDialer : IDialer
- {
- public bool Dial(string number)
- {
- return UIApplication.SharedApplication.OpenUrl (
- new NSUrl ("tel:" + number));
- }
- }
- }
- 在解決方案資料總管中,右鍵單擊Phoneword.Android項目,然後選擇添加>建立項目...:
Xamarin.Forms快速入門 - 在添加新項目對話框中,選擇Visual C#> Android>類,命名新的檔案PhoneDialer,然後單擊添加按鈕:
Xamarin.Forms快速入門 -
在PhoneDialer.cs中,删除所有的模闆代碼,并将其替換為以下代碼。 此代碼建立将在Android平台上使用的撥号方式撥打已翻譯的電話号碼:
點選(此處)折疊或打開
- using Android.Content;
- using Android.Telephony;
- using Phoneword.Droid;
- using System.Linq;
- using Xamarin.Forms;
- using Uri = Android.Net.Uri;
- [assembly: Dependency(typeof(PhoneDialer))]
- namespace Phoneword.Droid
- {
- public class PhoneDialer : IDialer
- {
- public bool Dial(string number)
- {
- var context = Forms.Context;
- if (context == null)
- return false;
- var intent = new Intent (Intent.ActionCall);
- intent.SetData (Uri.Parse ("tel:" + number));
- if (IsIntentAvailable (context, intent)) {
- context.StartActivity (intent);
- return true;
- }
- return false;
- }
- public static bool IsIntentAvailable(Context context, Intent intent)
- {
- var packageManager = context.PackageManager;
- var list = packageManager.QueryIntentServices (intent, 0)
- .Union (packageManager.QueryIntentActivities (intent, 0));
- if (list.Any ())
- return true;
- var manager = TelephonyManager.FromContext (context);
- return manager.PhoneType != PhoneType.None;
- }
- }
- }
- 在解決方案資料總管中,在Phoneword.Android項目中,輕按兩下屬性并選擇Android Manifest頁籤:
Xamarin.Forms快速入門 - 在必需的權限部分,啟用CALL_PHONE權限。 這給予應用程式許可撥打電話: 通過按CTRL+S将更改儲存到清單,并關閉檔案。
Xamarin.Forms快速入門 - 在解決方案資料總管中,右鍵單擊Phoneword.UWP項目,然後選擇添加>建立項目...
Xamarin.Forms快速入門 - 在“添加新項目”對話框中,選擇“Visual C#>代碼”>“類”,命名新檔案PhoneDialer,然後單擊“添加”按鈕:
Xamarin.Forms快速入門 -
在PhoneDialer.cs中,删除所有的模闆代碼,并将其替換為以下代碼。 此代碼建立将在通用Windows平台上使用的Dial方法和幫助方法來撥打已翻譯的電話号碼:
點選(此處)折疊或打開
- using Phoneword.UWP;
- using System;
- using System.Threading.Tasks;
- using Windows.ApplicationModel.Calls;
- using Windows.UI.Popups;
- using Xamarin.Forms;
- [assembly: Dependency(typeof(PhoneDialer))]
- namespace Phoneword.UWP
- {
- public class PhoneDialer : IDialer
- {
- bool dialled = false;
- public bool Dial(string number)
- {
- DialNumber(number);
- return dialled;
- }
- async Task DialNumber(string number)
- {
- var phoneLine = await GetDefaultPhoneLineAsync();
- if (phoneLine != null)
- {
- phoneLine.Dial(number, number);
- dialled = true;
- }
- else
- {
- var dialog = new MessageDialog("No line found to place the call");
- await dialog.ShowAsync();
- dialled = false;
- }
- }
- async TaskPhoneLine> GetDefaultPhoneLineAsync()
- {
- var phoneCallStore = await PhoneCallManager.RequestStoreAsync();
- var lineId = await phoneCallStore.GetDefaultLineAsync();
- return await PhoneLine.FromIdAsync(lineId);
- }
- }
- }
- In Solution Explorer, in the Phoneword.UWP project, right-click References, and select Add Reference...:在解決方案資料總管中,在Phoneword.UWP項目中,右鍵單擊引用,然後選擇添加引用...:
Xamarin.Forms快速入門 - 在“參考管理器”對話框中,選擇“通用Windows>擴充> Windows Mobile Extensions for UWP”,然後單擊“确定”按鈕:
Xamarin.Forms快速入門 - 在解決方案資料總管中,在Phoneword.UWP項目中,輕按兩下Package.appxmanifest:
Xamarin.Forms快速入門 - 在“功能”頁面中,啟用電話呼叫功能。 這給予應用程式許可撥打電話: 通過按CTRL+S将更改儲存到清單,并關閉檔案。
Xamarin.Forms快速入門 - 在Visual Studio中,選擇Build> Build Solution菜單項(或按CTRL + SHIFT + B)。 該應用程式将建構,一個成功的消息将出現在Visual Studio狀态欄中: 如果有錯誤,請重複上述步驟并糾正任何錯誤,直到應用程式建構成功。
Xamarin.Forms快速入門 - 在解決方案資料總管中,右鍵單擊Phoneword.UWP項目,然後選擇設定為啟動項目:
Xamarin.Forms快速入門 - 在Visual Studio工具欄中,按開始按鈕(類似于播放按鈕的三角形按鈕)啟動應用程式:
Xamarin.Forms快速入門 Xamarin.Forms快速入門 - 在解決方案資料總管中,右鍵單擊Phoneword.Android項目,然後選擇設定為啟動項目。
- 在Visual Studio工具欄中,按開始按鈕(類似于播放按鈕的三角形按鈕)在Android模拟器中啟動應用程式。
- 如果您有iOS裝置并滿足Xamarin.Forms開發的Mac系統要求,請使用類似的技術将應用程式部署到iOS裝置。 注意:所有模拟器都不支援電話。
祝賀您完成Xamarin.Forms應用程式。 本指南中的下一個主題将回顧本演練中采取的步驟,以了解使用Xamarin.Forms的應用程式開發的基礎知識。