44

我想知道Android中的用户手机号码。我使用了这个代码,但我没有得到数字。

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

允许:

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

安卓手机必须存号码吗 settings --> about phone --> status --> myphone number

对此有任何想法吗?

4

5 回答 5

30

我认为 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"/>

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

于 2012-12-27T07:31:52.807 回答
10

获取电话号码、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"/>
于 2015-03-17T11:28:46.000 回答
5

更新:此答案不再可用,因为 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);
}

检查 actype 的 whatsapp 帐户

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

当然,如果用户没有安装 Whatsapp,您可能无法获得它,但无论如何都值得一试。请记住,您应该始终要求用户确认。

于 2013-05-08T04:06:36.827 回答
2

你一切都好,但问题在于getLine1Number()功能。

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

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

因此,如果您需要根据 sim 执行操作(而不是调用),那么您应该使用getSimSerialNumber(). 它始终是唯一的有效的并且始终存在

于 2012-12-27T07:58:06.177 回答
-18

您可以使用 TelephonyManager 执行此操作:

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

你用过吗

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
于 2012-12-27T07:29:53.437 回答