2012-12-27 192 views
29

我想知道Android中的用户手机号码。我使用这个代码,但我没有得到数字。如何在Android中获取当前的SIM卡号码?

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
     String n = tm.getLine1Number(); 

权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

是不是必须保存数Android手机settings --> about phone --> status --> myphone number

任何想法,对此有何看法?

+0

你有READ_PHONE_STATE许可? – 323go

+0

使用权限android:name =“android.permission.READ_PHONE_STATE”/> –

+0

你不能那样做。 –

回答

-10

可以使用TelephonyManager做到这一点:

TelephonyManager t = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String number = t.getLine1Number(); 

你用

<uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
+6

请阅读问题描述。不要只是通过阅读标题来回答。 –

+1

这不适用于我的情况。它是给空串。我在Nexus 4上测试了Android 4.4和Galaxy Grand 4.2.2 –

0

需要READ_PHONE_STATE权限。

TelephonyManager telMgr = 
    (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE); 

    String deviceID = telMgr.getDeviceId(); 
    String simSerialNumber = telMgr.getSimSerialNumber(); 
String simLineNumber = telMgr.getLine1Number(); 
23

我觉得sim serial number和sim number是唯一的。您可以尝试获取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"/> 

让我知道是否有任何问题。

+0

我写了上面的代码,但是我的sim号码是空的。所以我想要做什么? –

+0

假设如果我更换SIM卡的同一个电话号码,是否我得到相同的SIM卡序列号?在所有设备 – NandaKumar

+0

得到空值 –

3

你有一切权利,但问题是与getLine1Number()函数。

getLine1Number() -此方法返回线 1的电话号码串,即所述MSISDN用于GSM电话。如果不可用,则返回null。

此方法仅适用于少数手机,但不适用于所有手机。

因此,如果您需要根据SIM执行操作(除了调用),那么您应该使用getSimSerialNumber()。它始终是唯一,有效它总是存在

6

更新:此答案不再可用,因为Whatsapp已经停止将电话号码公开为帐户名称,请不要理会此答案。

============================================= ====================================

已经差不多6个月了,我相信我应该请使用您可能需要考虑的替代解决方案来更新此文件。

截至今日,您可以依靠另一个大型应用程序Whatsapp,使用AccountManager。成千上万的设备安装了此应用程序,如果您无法通过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); 
} 

检查actype为WhatsApp的帐户

if(actype.equals("com.whatsapp")){ 
    String phoneNumber = ac.name; 
} 

当然,你可能不会得到它,如果用户没有安装了WhatsApp,但其无论如何值得去尝试。 并记住你应该总是要求用户确认。

+0

它返回的应用程序数量不限 – Ravi

+0

的名称Viber(不是WhatsApp)将电话号码添加到名称字段! – xnagyg

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"/> 
相关问题