程式功能:
何創建一個應用程式,將字母數字電話號碼(由用戶輸入)轉換為數字電話號碼,然后呼叫該號碼,
開發環境:VS2019 Enterprise
硬體:ThinkPad T570
系統:win10
步驟:
打開VS,創建新專案,選擇移動應用(Xamarin.Forms)

點擊下一步,給專案命名為Phoneword,然后點擊創建
選擇空白應用,然后點擊創建

打開MainPage.xaml檔案,內容刪掉后改成如下:
using System;
using Xamarin.Forms;
namespace Phoneword
{
public partial class MainPage : ContentPage
{
string translatedNumber;
public MainPage()
{
InitializeComponent();
}
void OnTranslate(object sender, EventArgs e)
{
translatedNumber = 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.Get<IDialer>();
if (dialer != null)
dialer.Dial(translatedNumber);
}
}
}
}
右擊Phoneword專案——>選擇添加——>新建項——>選擇類,取名為PhoneTranslator.cs,如下圖:

代碼如下:
using System.Text;
namespace Phoneword
{
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;
}
}
}
新建介面:右擊Phoneword專案——>新建項——>選擇介面——>命名為IDialer.cs,代碼如下:
namespace Phoneword
{
public interface IDialer
{
bool Dial(string number);
}
}
新建介面實作:右擊Phoneword.Android——>新建項——>選擇Visual C#——>Android——>類,命名為PhoneDialer.cs,代碼如下:
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 = MainActivity.Instance;
if (context == null)
return false;
var intent = new Intent(Intent.ActionDial);
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目錄下的MainActivity.cs,代碼改成:
using Android.App;
using Android.Content.PM;
using Android.OS;
namespace Phoneword.Droid
{
[Activity(Label = "Phoneword", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher =
true,
ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
internal static MainActivity Instance { get; private set; }
protected override void OnCreate(Bundle bundle)
{
TabLayoutResource = Resource.Layout.Tabbar;
ToolbarResource = Resource.Layout.Toolbar;
base.OnCreate(bundle);
Instance = this;
global::Xamarin.Forms.Forms.Init(this, bundle);
LoadApplication(new App());
}
}
}
在“解決方案資源管理器”的“Phoneword.Android”專案中,雙擊“屬性”,然后選擇“Android 清單”選項卡:

在“所需的權限”部分中,啟用“CALL_PHONE”權限, 這將向應用程式授予進行電話呼叫的權限:

然后右擊解決方案Phoneword選擇“生成解決方案”,然后把手機通過資料線連接到電腦上,打開手機的開發者模式,打開OEM解鎖,打開USB除錯,然后就能在電腦的VS中看到你的手機型號,如下圖:

點擊運行就能看到手機上提示你是否允許安裝程式,安裝完之后,就可以開始運行程式了 ,如下圖:

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/414034.html
標籤:其他
