我想知道Android中的用户手机号码。我使用了这段代码,但我没有得到号码。
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String n = tm.getLine1Number();
许可:
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
是否必须在android mobile settings --> about phone --> status --> myphone number
对此有什么想法吗?
答案 0 :(得分:27)
我认为sim序列号和sim号是唯一的。您可以尝试使用此方法获取SIM序列号并获取SIM卡号,并且不要忘记在清单文件中添加权限。
TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String getSimSerialNumber = telemamanger.getSimSerialNumber();
String getSimNumber = telemamanger.getLine1Number();
并在您的Androidmanifest.xml
文件中添加以下权限。
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
如果有任何问题,请告诉我。
答案 1 :(得分:7)
获取电话号码,IMEI和SIM卡ID
TelephonyManager tm = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
对于SIM卡,请使用getSimSerialNumber()
//---get the SIM card ID---
String simID = tm.getSimSerialNumber();
if (simID != null)
Toast.makeText(this, "SIM card ID: " + simID,
Toast.LENGTH_LONG).show();
手机的电话号码,请使用getLine1Number()(某些设备不会返回电话号码)
//---get the phone number---
String telNumber = tm.getLine1Number();
if (telNumber != null)
Toast.makeText(this, "Phone number: " + telNumber,
Toast.LENGTH_LONG).show();
手机的IMEI号码,使用getDeviceId()
//---get the IMEI number---
String IMEI = tm.getDeviceId();
if (IMEI != null)
Toast.makeText(this, "IMEI number: " + IMEI,
Toast.LENGTH_LONG).show();
需要权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
答案 2 :(得分:6)
更新:由于Whatsapp已停止将电话号码作为帐户名称公开,因此不再提供此答案,请忽略此答案。
=============================================== ==================================
已经差不多6个月了,我相信我应该用你可能想要考虑的替代解决方案来更新它。
截至今天,您可以使用AccountManager依赖另一个大型应用程序Whatsapp。数以百万计的设备安装了此应用程序,如果您无法通过TelephonyManager获取电话号码,您可以试一试。
许可:
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
代码:
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();
ArrayList<String> googleAccounts = new ArrayList<String>();
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
if(actype.equals("com.whatsapp")){
String phoneNumber = ac.name;
}
当然,如果用户没有安装Whatsapp,你可能无法得到它,但无论如何都值得尝试。 请记住,您应该始终要求用户确认。
答案 3 :(得分:2)
你有一切正确,但问题在于getLine1Number()
功能。
getLine1Number() - 此方法返回行的电话号码字符串 1,即GSM手机的MSISDN。如果不可用则返回null。
此方法仅适用于少数手机但不适用于所有手机。
因此,如果您需要根据sim(除了调用)执行操作,那么您应该使用getSimSerialNumber()
。它总是唯一,有效,并且始终存在。
答案 4 :(得分:-12)
您可以使用TelephonyManager执行此操作:
TelephonyManager t = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
String number = t.getLine1Number();
你使用过
吗?<uses-permission android:name="android.permission.READ_PHONE_STATE"/>