如何以編程方式獲取運行個人android應用的設備的電話號碼? android
只是想在以上答案的以上說明中添加一些內容。 這也將爲他人節省時間。 編程
在個人狀況下,此方法未返回任何手機號碼,返回了一個空字符串。 因爲這種狀況,我將本身的號碼移植到了新的SIM卡上。 所以,若是我進入「設置」>「關於電話」>「狀態」>「個人電話號碼」,則會顯示「未知」。 網絡
若是您沒法經過電話服務得到解決方案,則實際上可能須要考慮其餘解決方案。 app
到目前爲止,您可使用AccountManager
依賴於另外一個大型應用程序Whatsapp。 數百萬的設備已安裝了此應用程序,若是您沒法經過TelephonyManager
獲取電話號碼,則能夠嘗試一下。 this
容許: spa
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
碼: code
AccountManager am = AccountManager.get(this); Account[] accounts = am.getAccounts(); for (Account ac : accounts) { String acname = ac.name; String actype = ac.type; // Take your time to look at all available accounts System.out.println("Accounts : " + acname + ", " + actype); }
檢查WhatsApp賬戶的actype
xml
if(actype.equals("com.whatsapp")){ String phoneNumber = ac.name; }
固然,若是用戶未安裝WhatsApp,則可能沒法得到它,但仍是值得嘗試的。 記住,您應該始終向用戶詢問確認信息。 字符串
TelephonyManager
不是正確的解決方案,由於在某些狀況下,該號碼未存儲在SIM卡中。 我建議您應該在首次打開應用程序時使用共享首選項來存儲用戶的電話號碼,而且該號碼將在須要時使用。 get
碼:
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE); String mPhoneNumber = tMgr.getLine1Number();
所需權限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
根據高度評價的評論,須要注意一些警告。 這能夠返回null
或""
甚至"???????"
,而且它能夠返回再也不有效的舊電話號碼。 若是您想要惟一標識設備的信息,則應改用getDeviceId()
。
如我先前的答案中所述
使用如下代碼:
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE); String mPhoneNumber = tMgr.getLine1Number();
在AndroidManifest.xml中,授予如下權限:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
可是請記住,此代碼並不老是有效,由於手機號碼取決於SIM卡和網絡運營商/手機運營商。
另外,請嘗試在「 電話」->「設置」->「關於」->「電話身份」中進行檢查 ,若是您可以在那裏查看號碼,則從上述代碼獲取電話號碼的可能性更高。 若是您沒法在設置中查看電話號碼,則沒法經過此代碼獲取!
建議的解決方法:
在應用程序首次啓動期間,將上述4個步驟做爲一次活動進行。 之後,每當須要電話號碼時,請使用共享首選項中的可用值。