【问题标题】:How to get current SIM card number in Android?如何在 Android 中获取当前的 SIM 卡号?
【发布时间】:2012-12-12 15:03:45
【问题描述】:

我想知道 Android 中的用户手机号码。我使用了此代码,但没有收到号码。

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

权限:

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

android手机中是否必须保存号码settings --&gt; about phone --&gt; status --&gt; myphone number

对此有什么想法吗?

【问题讨论】:

  • 你有 READ_PHONE_STATE 权限吗?
  • 使用权限 android:name="android.permission.READ_PHONE_STATE"/>
  • @Madhavi :取决于设备。所以确保你没有使用任何双卡或中文设备?
  • 这是常见问题....有些设备会返回号码,有些则不会(他们有手机应用程序)。这是一个很好的算法,对你有用stackoverflow.com/questions/5134398/…

标签: android phone-number telephonymanager sim-card


【解决方案1】:

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

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

你用过吗

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

【讨论】:

  • 请阅读问题描述。不要只是通过阅读标题来回答。
  • 这至少在我的情况下不起作用。它给出了空字符串。我在 Nexus 4 上测试了 android 4.4 和 Galaxy grand 4.2.2
【解决方案2】:

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

如果有任何问题,请告诉我。

【讨论】:

  • 我写了上面的代码,但我的 sim 号码是空的。那我想做什么?
  • 假设如果我用相同的电话号码更换SIM卡,我是否得到相同的SIM序列号?
  • 在所有设备中获取空值
  • getSimSerialNumber() 函数返回一个包含提供者信息等的字符串。如果你想得到纯 sim 序列号,你必须得到最后 14 个数字
  • sim 号码不是唯一的,因为此方法不会为所有带有 sim 卡的设备返回它
【解决方案3】:

一切正常,但问题出在getLine1Number() 函数上。

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

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

所以,如果你需要根据sim进行操作(除了调用),那么你应该使用getSimSerialNumber()。它始终唯一有效并且始终存在

【讨论】:

    【解决方案4】:

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

    检查whatsapp帐户的actype

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

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

    【讨论】:

    • 它返回应用程序的名称而不是数字
    • Viber(不是 WhatsApp)将电话号码添加到姓名字段!
    【解决方案5】:

    获取电话号码、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"/>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-02-19
      • 2011-01-13
      • 1970-01-01
      • 2011-07-27
      • 2021-12-16
      • 1970-01-01
      • 2017-05-21
      • 1970-01-01
      相关资源
      最近更新 更多