web-dev-qa-db-ja.com

TelephonyManager.getLine1Number()が失敗しましたか?

Androidデバイスの電話番号を取得します。このコードを使用します:

TelephonyManager tm = (TelephonyManager)this.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE); 
String phoneNumber=  tm.getLine1Number();

私の電話(HTC Wildfire)では、電話番号を取得できません。取得できるのは空の文字列だけです。 emulaturでコードを実行すると、通常、電話番号が表示されます。

[設定] => [電話について] => [電話のID]-> [電話番号]に移動すると、電話番号が「不明」になります。

問題はどこだ? SIMに問題がありますか?

30
knagode

私たちのプロジェクトでも同じ問題がありました。結論は、それはSIMカードに依存しているということでした。

私たちに何が起こったのか:

  • AT&T SIMカードを搭載したGalaxy S:電話番号を読み取ることができ、設定には番号が表示されます
  • ヨーロッパのSIMカードと同じGalaxy:番号を読み取れず、「設定」で「不明」(携帯電話は完全に機能し、番号を読み取れなかった)

これは他のフォーラムでも報告されています。

最終的に、ユーザーに電話番号を尋ねることにしました。実際にはもう少し複雑です:if( "SIM card present" && "cannot read the cell number") "ask user";。それ以外の場合は、そもそもSIMカードを使用していないユーザーにバグを報告し続けます。

35

電話番号の代わりに、SIMカードのシリアル番号を使用します。これは常に存在し、常に有効な値です。

 telephonyManager.getSimSerialNumber();

SIMシリアル番号は、少なくともオペレーター内で一意です。と組み合わせる

 telephonyManager.getNetworkOperator();

国内の加入者の一意の識別子を取得します。

これと組み合わせる

 telephonyManager.getNetworkCountryIso();

サブスクライバーのグローバルに一意の識別子を取得します。

これがお役に立てば幸いです。

乾杯。

11
Nar Gar

SIMカードには電話番号が保存されており、ユーザーが編集できます。 Androidについては言うことができますが、WMではSIMカードに保存されている電話番号を簡単に編集できます。もちろん、その場で電話番号を変更できるという意味ではありません。実際には、あなたはそこに好きな数を自由に書くことができ、プログラムはこれがあなたの本当の数であると信じています:)

5
trashkalmar

SIMカードを新しい電話に移したとき、電話番号が[設定]-> [電話情報]-> [ステータス]-> [私の電話番号]に表示されないことがあります。

私のデータポイント:

  • AT&T Atrixが完全に新しいSIMを搭載すると、「Voice MSISDN Line1 null」と表示されます。
  • T-Mobile G1に新しいSIMカードを挿入すると、電話番号が正しく表示されます。
  • T-Mobile G2でSIMカードを古いG1からに移動すると、「不明」と表示されます。
2
Dan J

データ転送のみを許可するsimカードを使用しています。電話は許可されていません。

getLine1Number()で電話番号を取得しようとすると、空の文字列が取得されます。

0
trante

SIMカードが許可されている場合は、電話番号を使用して電話番号を取得できます。私たちの会社では、SIMが1つしか見つかりませんでした。私はすべてのAndroidデバイスでこのSIMをテストしています。すべて問題ありません。getLine1Number()は問題ありません。今、他のSIMの電話番号を取得しています。SMSをSMSサーバーに送信しますまたはその他Androidデバイス(SMSの処理あり))

0
RN3KK Nick