Androidデバイスの電話番号を取得します。このコードを使用します:
TelephonyManager tm = (TelephonyManager)this.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
String phoneNumber= tm.getLine1Number();
私の電話(HTC Wildfire)では、電話番号を取得できません。取得できるのは空の文字列だけです。 emulaturでコードを実行すると、通常、電話番号が表示されます。
[設定] => [電話について] => [電話のID]-> [電話番号]に移動すると、電話番号が「不明」になります。
問題はどこだ? SIMに問題がありますか?
私たちのプロジェクトでも同じ問題がありました。結論は、それはSIMカードに依存しているということでした。
私たちに何が起こったのか:
これは他のフォーラムでも報告されています。
最終的に、ユーザーに電話番号を尋ねることにしました。実際にはもう少し複雑です:if( "SIM card present" && "cannot read the cell number") "ask user";
。それ以外の場合は、そもそもSIMカードを使用していないユーザーにバグを報告し続けます。
電話番号の代わりに、SIMカードのシリアル番号を使用します。これは常に存在し、常に有効な値です。
telephonyManager.getSimSerialNumber();
SIMシリアル番号は、少なくともオペレーター内で一意です。と組み合わせる
telephonyManager.getNetworkOperator();
国内の加入者の一意の識別子を取得します。
これと組み合わせる
telephonyManager.getNetworkCountryIso();
サブスクライバーのグローバルに一意の識別子を取得します。
これがお役に立てば幸いです。
乾杯。
SIMカードには電話番号が保存されており、ユーザーが編集できます。 Androidについては言うことができますが、WMではSIMカードに保存されている電話番号を簡単に編集できます。もちろん、その場で電話番号を変更できるという意味ではありません。実際には、あなたはそこに好きな数を自由に書くことができ、プログラムはこれがあなたの本当の数であると信じています:)
SIMカードを新しい電話に移したとき、電話番号が[設定]-> [電話情報]-> [ステータス]-> [私の電話番号]に表示されないことがあります。
私のデータポイント:
データ転送のみを許可するsimカードを使用しています。電話は許可されていません。
getLine1Number()
で電話番号を取得しようとすると、空の文字列が取得されます。
SIMカードが許可されている場合は、電話番号を使用して電話番号を取得できます。私たちの会社では、SIMが1つしか見つかりませんでした。私はすべてのAndroidデバイスでこのSIMをテストしています。すべて問題ありません。getLine1Number()は問題ありません。今、他のSIMの電話番号を取得しています。SMSをSMSサーバーに送信しますまたはその他Androidデバイス(SMSの処理あり))