2017-07-12 109 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; 
} 
関連する問題