/// <summary> /// Place a phone call on the phone line. /// The caller must be in the foreground. /// </summary> /// <param name="number">The number to dial.</param> /// <param name="displayName">The display name of the party receiving the phone call. /// This parameter is optional.</param> public void Dial(string number, string displayName) { #if __ANDROID__ string action = Intent.ActionCall; Intent callIntent = new Intent(action, Android.Net.Uri.FromParts("tel", PhoneCallManager.CleanPhoneNumber(number), null)); callIntent.AddFlags(ActivityFlags.ClearWhenTaskReset); Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity.StartActivity(callIntent); #elif __IOS__ global::Foundation.NSUrl url = new global::Foundation.NSUrl("tel:" + PhoneCallManager.CleanPhoneNumber(number)); UIKit.UIApplication.SharedApplication.OpenUrl(url); #elif WINDOWS_UWP _line.Dial(number, displayName); #endif }
public static async Task <bool> LaunchUriPlatformAsync(Uri uri) { if (IsSpecialUri(uri) && CanHandleSpecialUri(uri)) { return(await HandleSpecialUriAsync(uri)); } var appleUrl = new AppleUrl(uri.OriginalString); #if __IOS__ return(UIApplication.SharedApplication.OpenUrl( appleUrl)); #else return(NSWorkspace.SharedWorkspace.OpenUrl( appleUrl)); #endif }
/*internal static void CompletionHandler(IAsyncInfo operation, AsyncStatus status) { global::System.Diagnostics.Debug.WriteLine(operation.ErrorCode); Type storeType = Type.GetType("Windows.ApplicationModel.Calls.PhoneCallStore, Windows, ContentType=WindowsRuntime"); Type template = typeof(Windows.Foundation.IAsyncOperation<>); Type genericType = template.MakeGenericType(storeType); var nativeStore = genericType.GetRuntimeMethod("GetResults", new Type[0]).Invoke(operation, new object[0]); } */ /// <summary> /// Launches the built-in phone call UI with the specified phone number and display name. /// </summary> /// <param name="phoneNumber">A phone number. /// This should be in international format e.g. +12345678901</param> /// <param name="displayName">A display name.</param> public static void ShowPhoneCallUI(string phoneNumber, string displayName) { #if __ANDROID__ string action = Intent.ActionDial; //promptUser ? Intent.ActionDial : Intent.ActionCall; Intent callIntent = new Intent(action, Android.Net.Uri.FromParts("tel", CleanPhoneNumber(phoneNumber), null)); callIntent.AddFlags(ActivityFlags.ClearWhenTaskReset); Plugin.CurrentActivity.CrossCurrentActivity.Current.Activity.StartActivity(callIntent); //Platform.Android.ContextManager.Context.StartActivity(callIntent); #elif __IOS__ if (UIKit.UIDevice.CurrentDevice.Model != "iPhone") { UIKit.UIAlertView av = new UIKit.UIAlertView("Phone", "Dial " + phoneNumber, null, "Done"); av.Show(); } else { global::Foundation.NSUrl url = new global::Foundation.NSUrl("telprompt:" + CleanPhoneNumber(phoneNumber)); UIKit.UIApplication.SharedApplication.OpenUrl(url); } #elif WINDOWS_UWP || WINDOWS_PHONE_APP #if WINDOWS_UWP if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.ApplicationModel.Calls.PhoneCallManager")) { #endif Windows.ApplicationModel.Calls.PhoneCallManager.ShowPhoneCallUI(phoneNumber, displayName); #if WINDOWS_UWP } else { Windows.System.Launcher.LaunchUriAsync(new Uri("tel:" + phoneNumber)); } #endif #elif WINDOWS_APP || WIN32 MessageDialog prompt = new MessageDialog(string.Format("Dial {0} at {1}?", displayName, phoneNumber), "Phone"); prompt.Commands.Add(new UICommand("Call", async (c) => { // Windows may prompt the user for an app e.g. Skype, Lync etc await Launcher.LaunchUriAsync(new Uri("tel:" + CleanPhoneNumber(phoneNumber))); })); prompt.Commands.Add(new UICommand("Cancel", null)); prompt.ShowAsync(); #elif WINDOWS_PHONE PhoneCallTask pct = new PhoneCallTask(); pct.PhoneNumber = phoneNumber; pct.DisplayName = displayName; pct.Show(); #else throw new PlatformNotSupportedException(); #endif }