Xamarin.Forms;在屏幕上的设备上显示我的SIM卡的电话号码

时间:2017-07-12 23:07:52

标签: android xamarin xamarin.android xamarin.forms

我想在屏幕上显示设备的电话号码。

在Xamarin.Android中代码是可行的。但我想在Xamarin.Forms中使用代码。 我已经搜索过,但没有找到任何结果。

Android.Telephony.TelephonyManager tMgr = (Android.Telephony.TelephonyManager)this.GetSystemService(Android.Content.Context.TelephonyService);
string mPhoneNumber = tMgr.Line1Number;

-I给予了许可:READ_PHONE_STATE

   <StackLayout>
        <Button FontSize="Large" Text="Telefon Numarasını Al" BackgroundColor="Blue" x:Name="btnNumaraAl" Clicked="btnNumaraAl_Clicked"></Button>
        <Label FontSize="Large" BackgroundColor="Red" x:Name="txtPhone" VerticalOptions="Center" HorizontalOptions="Center"></Label>
    </StackLayout>

当我点击btnNumaraAl时,txtPhone.Text可以是我的设备电话号码。

资源: Getting the number of the phone Xamarin.Android? https://developer.xamarin.com/api/type/Android.Telephony.TelephonyManager/

1 个答案:

答案 0 :(得分:2)

  1. 定义您的抽象,Xamarin.Forms项目中的接口。

    namespace YourApp
    {
      public interface IDeviceInfo
      {
        string GetPhoneNumber();
      }
    }
    
  2. 然后,您需要在每个平台中实施。 Android实现应该如下所示。

    using Android.Telephony;
    using TodoApp;
    using Xamarin.Forms;
    [assembly:Xamarin.Forms.Dependency(typeof(YourApp.Droid.DeviceInfo))]
    namespace YourApp.Droid
    {
        public class DeviceInfo: IDeviceInfo
        {
            public string GetPhoneNumber()
            {
                var tMgr = (TelephonyManager)Forms.Context.ApplicationContext.GetSystemService(Android.Content.Context.TelephonyService);
                return tMgr.Line1Number;
            }
        }
    }
    
  3. 最后,您可以使用DependencyService在您的Xamarin.Forms项目中使用。

     var deviceInfo = Xamarin.Forms.DependencyService.Get<TodoApp.IDeviceInfo>();
     var number = deviceInfo.GetPhoneNumber();
    
  4.   

    在iOS上,由于安全限制,您无法获取所有者的电话号码。您可以查看此问题Programmatically get own phone number in iOS

    基于此,您可能需要检查您的应用是在Android还是iOS上。

    switch(Device.RuntimePlatform){
      case "Android":
         //you can
         break;
      case "iOS"
         //You can't
         break;
    }