2011-07-29 127 views
2

下面的代碼不給我設備的電話號碼,我怎樣才能獲得的電話號碼Android手機號碼

TelephonyManager tm = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String number = tm.getLine1Number(); 
Toast.makeText(getApplicationContext(),"Telephone number: "+ number, 
         Toast.LENGTH_SHORT).show(); 

我也有試過following..but數量利己顯示

Programmatically obtain the phone number of the Android phone

How to get the mobile number of current sim card in real device?

+1

你插入了SIM卡嗎?它會返回什麼? – Reno

+1

這個數字並不總是有效的。例如,一些預付卡沒有存儲在SIM卡中的號碼。 –

+0

是的,我已經插入了SIM卡,並不是預付卡.. – Rajeev

回答

0

代碼提供:

TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE); 
    mPhoneNumber = tMgr.getLine1Number(); 

應該可以正常工作,但是,如果您忘記了「READ_PHONE_STATE」權限,則不會。

希望這個作品現在:)

+0

嘿..我已經包括了權限.. – Rajeev

+0

然後我害怕我不知道什麼是錯的,除非你可以顯示一些DMS日誌? – Androider

0

試試這個:

private String getMyPhoneNumber(){ 
     TelephonyManager mTelephonyMgr; 
     mTelephonyMgr = (TelephonyManager) 
      getSystemService(Context.TELEPHONY_SERVICE); 
     return mTelephonyMgr.getLine1Number(); 
    } 

希望它可以幫助你

2

唯一的方法可以從Android的API爲所有的意見建議是getLine1Number() 。然而,我從來沒有能夠獲得它,因爲您的運營商必須爲您提供一個支持讓手機讀取內部電話號碼的SIM卡。這似乎不是很常見,所以我擔心你可能沒有辦法知道它。

這就是爲什麼一些使用你的電話號碼識別你的程序(即Whatsapp)詢問用戶關於他/她的電話號碼的原因,因爲沒有辦法以編程方式獲得他/她的電話號碼。

+0

謝謝..就像你回答它的方式.. – Rajeev

0

[在情況下,如果還有人跌倒在這裏尋找這個仍然存在的老問題]

據我所知,TelephonyManager.getLine1Number()是不可靠的,由於從運營商的各種約束。 有一些基於Java反射的黑客攻擊,但因設備而異,因此使這些黑客毫無用處[至少在支持模式方面]

但是,如果您確實需要找到該號碼,則存在合法的合法邏輯所以。通過短信提供商查詢所有短信並獲取「收件人」號碼。

這個技巧的其他好處:1.如果設備中有多個SIM卡,你可以得到所有的線路號碼。

缺點:1.您需要SMS_READ權限[對不起] 2.您將獲得設備中曾經使用的所有SIM卡號碼。這個問題可以通過一些約束邏輯來最小化。時間範圍(僅在今天收到或發送的短信)等。聽取其他人關於如何改善這種情況的信息會很有趣。