2012-07-18 30 views
1

我正在嘗試使用以下代碼讀取設備的電話號碼。當電話號碼不可用時,我閱讀訂閱者ID。它在一些手機中工作,並在某些設備中拋出NULL指針異常。該設備日誌顯示我收到NULL指針異常以下行讀取設備電話號碼拋出NULLPointerException

if(MyPhoneNumber.equals("")) 

請讓我知道如何使它在所有的設備上運行。

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

String MyPhoneNumber = tMgr.getLine1Number(); 


if(MyPhoneNumber.equals("")) 
      MyPhoneNumber = tMgr.getSubscriberId(); 
+0

可能重複的[獲取電話號碼問題](http://stackoverflow.com/questions/5134398/get-phone-number-problem) – 2012-07-18 05:07:49

回答

6

SIM卡上沒有SIM卡上的電話號碼,例如印度SIM卡在任何存儲器中都沒有電話號碼,所以我們無法從這些連接中獲得電話號碼。但是,一些國家和運營商已經將電話號碼存儲在SIM卡上,我們可以獲得這些號碼。爲了讓這對所有設備的工作,我們可以採用兩種策略:

  1. 爲了避免空指針異常,我們可以捕獲錯誤,並相應地工作。像:

    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. 或者,我們可以有一個短信網關,每當我們需要的電話號碼,我們可以發送短信到網關,然後部署web服務返回的號碼,短信網關接收消息,但是這個解決方案代價高昂。

+0

第二個選項是忙碌的,但它有意義 – dhams 2012-07-18 10:54:31

+0

大家好,感謝您的回覆。 – user1123931 2012-07-18 13:50:38

+0

可能不太好提出這個老的線程,但到目前爲止,whatsapp被安裝在數以百萬計的android中,你可以嘗試'AccountManager.getAccounts()',可能有一個帳戶type ='com.whatsapp '和你的電話號碼的價值,我相信這可能是你的選擇3。 – 2013-05-08 03:23:31

0

有時電話號碼未在電話設置中設置。在這些情況下,getLine1Number()將返回null。你需要找出一種跟蹤任何你追蹤的方法。

這是一個人們遇到很多問題。我不在android上編程,但是我看到這個問題很多。確保你使用搜索來檢查你問的問題是否曾被問過。

0

添加清單READPHONESTATE權限

你可以使用

if(MyPhoneNumber.length<0) 
      MyPhoneNumber = tMgr.getSubscriberId(); 
2

爲了獲取設備的電話號碼,首先你要在設備上設置自己的電話號碼,只需經過:

設置 - >關於手機 - >狀態 - >我的手機號碼

當調用此代碼:

MyPhoneNumber = tMgr.getLine1Number(); 

它存儲的號碼真的返回。

0

enter image description here

TelephonyManager TM =(TelephonyManager)getSystemService(TELEPHONY_SERVICE);

String number = tm.getLine1Number();

相關問題