2017-07-12 107 views
1

我想在屏幕上顯示我的設備的電話號碼。Xamarin.Forms;在屏幕上顯示我的SIM卡的電話號碼

在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/

+0

您是否嘗試過使用依賴項服務? –

回答

1
  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(); 
    

僅舉iOS上你不能得到業主的電話號碼由於安全限制。您可以查看此問題Programmatically get own phone number in iOS

基於此,您可能需要檢查您的應用是否在Android或iOS上。

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