1

次のコードを使用して、デバイスの電話番号を読み取ろうとしています。電話番号が利用できない場合、加入者IDを読み取ります。一部の電話では機能し、一部のデバイスでは NULL ポインター例外をスローします。デバイス ログには、次の行で NULL ポインター例外が発生していることが示されています。

if(MyPhoneNumber.equals(""))

すべてのデバイスで動作するようにする方法を教えてください。

TelephonyManager tMgr =(TelephonyManager)ShowMyLocation.this.getSystemService(Context.TELEPHONY_SERVICE); 

String MyPhoneNumber = tMgr.getLine1Number(); 


if(MyPhoneNumber.equals(""))
             MyPhoneNumber = tMgr.getSubscriberId();
4

5 に答える 5

6

インドのように、SIMでは各オペレーターの電話番号を利用できません。Simはメモリに電話番号を持っていないため、これらの接続から電話番号を取得することはできません。ただし、一部の国や事業者はSIMに電話番号を保存しており、それらを取得することができます。これをすべてのデバイスで機能させるには、次の2つの戦略を採用できます。

  1. nullポインター例外を回避するために、エラーをキャッチしてそれに応じて作業することができます。好き:

    TelephonyManager tMgr = (TelephonyManager) 
                     ShowMyLocation.this.getSystemService(Context.TELEPHONY_SERVICE);
    
    String MyPhoneNumber = "0000000000";
    
    try 
    {
        MyPhoneNumber =tMgr.getLine1Number();
    }
    catch(NullPointerException ex)
    {
    }
    
    if(MyPhoneNumber.equals("")) 
        MyPhoneNumber = tMgr.getSubscriberId();
    
  2. または、SMSゲートウェイを使用して、電話番号が必要な場合はいつでも、ゲートウェイにSMSを送信し、Webサービスを展開して番号を返すと、SMSゲートウェイがメッセージを受信しますが、このソリューションにはコストがかかります。

于 2012-07-18T05:10:37.167 に答える
1

デバイスから電話番号を取得するには、まずデバイスに自分の電話番号を設定する必要があります。

設定 -> 電話について -> ステータス -> 私の電話番号

このコードを呼び出すと:

MyPhoneNumber = tMgr.getLine1Number();

格納された数値が実際に返されます。

于 2012-07-18T09:32:20.943 に答える
0

電話機の設定で電話番号が設定されていないことがあります。これらの場合、getLine1Number()は null を返します。追跡しているものを追跡する別の方法を見つける必要があります。

これは、多くの人が遭遇する問題です。私は Android でプログラミングをすることはあまりありませんが、これがよく聞かれるのを見てきました。検索を使用して、求めている質問が以前に尋ねられたかどうかを確認してください。

于 2012-07-18T05:02:56.713 に答える