【问题标题】:How to get the mobile number of current sim card in real device?如何在真机中获取当前sim卡的手机号?
【发布时间】:2011-01-13 11:27:27
【问题描述】:

我必须制作一个应用程序,显示手机中正在使用的 SIM 卡的联系人号码。为此,我需要使用 TelephonyManager 类。我可以详细了解它的用法吗?

【问题讨论】:

  • 您确实应该尝试更好地解释您的问题。您的问题很难理解,并且缺少任何可以让任何人帮助您的细节。
  • 您是否正在尝试将设备的手机号码输入您的 Android 应用程序?
  • 嗨 Narasimha,我想要 10 位电话号码,tm.getLine1Number() 返回 null。你能分享你的解决方案吗?
  • 很奇怪。当我点击“状态”时,我会得到一个与我自己不同的电话号码。我想这可能是因为我一直在使用同一个手机/手机。但是我已经切换了网络提供商。所以新的网络提供商做了一些事情,比如将我的号码 087 移植到他们的系统中,即 085 前缀。我手机上的状态显示我的电话号码是 085 XXXXXX,但这个号码对我或任何认识我的人都没有任何意义。

标签: android phone-number


【解决方案1】:

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

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

documentation for getLine1Number() 表示如果号码“不可用”,此方法将返回 null,但它没有说明号码何时可能不可用。

您需要通过将以下内容添加到您的清单中来为您的应用程序提供permission to make this query

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

(您不应使用TelephonyManager.getDefault()TelephonyManager 用作that is a private undocumented API call and may change in future。)

【讨论】:

  • 它给出空白字符串作为回报。那么如何让人们知道呢?
  • 在模拟器中它给出正确的值。但在真实设备中它返回空值。为什么?请你能给出任何解决方案
  • 有时,您的 SIM 卡上没有刻录号码。您可以通过转到设置来检查它,单击关于电话,通过单击状态项检查电话号码。如果未显示您的号码,则您无法在自己的应用程序中获取该号码。
  • 如何获取Email-id。?
  • 它在我的 HTC AT&T 设备上返回 null,如何获取它,我真的需要它。
【解决方案2】:

嗨,其实这是我的同一个问题,但我什么也没得到。现在我从特定的 Android 真实设备(Android Mobile)获得了手机号码和他的电子邮件 ID。现在一天 90% 的人在 Android 上使用什么是 App 应用程序移动设备。现在我通过这个 What's app API 获取移动电话号码和电子邮件 ID。使用起来非常简单,请参见下面的代码。

            AccountManager am = AccountManager.get(this);
            Account[] accounts = am.getAccounts();
      for (Account ac : accounts) 
       {
        acname = ac.name;

        if (acname.startsWith("91")) {
            mobile_no = acname;
        }else if(acname.endsWith("@gmail.com")||acname.endsWith("@yahoo.com")||acname.endsWith("@hotmail.com")){
            email = acname;
        }

        // Take your time to look at all available accounts
        Log.i("Accounts : ", "Accounts : " + acname);
    }

并导入此 API

    import android.accounts.Account;
    import android.accounts.AccountManager;

【讨论】:

  • 你为什么要比较 acname91。它只在印度有效吗
  • @Amarnath Baitha 在 WhatsApp 中,您可以使用任何未插入到安装了 WhatsApp 的设备上的任何 sim 号码?那是时候什么是正确的解决方案?在 What'SApp 中从来没有强制要求 SIM 卡是必需的!
【解决方案3】:

我必须制作一个应用程序,显示手机中正在使用的 SIM 卡的联系人号码。为此,我需要使用 Telephony Manager 类。我可以详细了解它的用法吗?

是的, 您必须使用电话管理器;如果您根本没有找到联系电话。用户的; 您可以通过使用相同的电话管理器类来获取 SIM 卡的 Sim 序列号和 Android 设备的 Imei 号...

添加权限:

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

进口:

import android.telephony.TelephonyManager;

使用下面的代码:

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);

         // get IMEI
         imei = tm.getDeviceId();

         // get SimSerialNumber
         simSerialNumber = tm.getSimSerialNumber();

【讨论】:

    【解决方案4】:

    好吧,所有这些都可能是临时黑客,但没有办法获取用户的手机号码。这违反了道德政策。

    例如,上述答案之一建议获取所有帐户并从那里提取。而且它不再起作用了! 所有这些都只是黑客攻击。

    获取用户手机号码的唯一方法是通过运营商。如果您与 Aitel、Vodafone 等移动运营商有合作关系,您可以在通过移动网络互联网连接时从手机请求的 header 中获取用户的手机号码。

    不确定是否有任何制造商联合起来获得特定许可是否有帮助 - 没有探索过这个领域,但至少没有任何记录。

    【讨论】:

      【解决方案5】:

      有时您可以通过向运营商提出 USSD 请求来检索电话号码。 例如,我可以通过拨打 *116# 来获取我的电话号码 我猜这可能可以在应用程序中完成,如果 USSD 响应可能会被捕获。 当然,这不是我建议在要分发的应用程序中使用的方法,代码甚至可能因运营商而异。

      【讨论】:

      • 这不适用于所有国家/地区的所有运营商。
      • 没错,这也是我在评论中所写的“有时您可以检索电话号码......”。在某些情况下,他们可能使用不同的 USSD 代码,有时他们可能根本没有该功能。
      【解决方案6】:

      正如许多人所说:

      String phoneNumber = TelephonyManager.getDefault().getLine1Number();
      

      可用性完全取决于运营商和 SIM 卡上的号码编码方式。如果它是由制造 SIM 卡的公司或移动运营商本身硬编码的。这与设置->关于手机中的返回相同。

      【讨论】:

      • getDefault() 类中没有 getDefault() 方法。
      • @Matt 当 Android 仍处于测试阶段时,但你是对的......当这个问题被问到(在 Android 1.0 之后)时,它已从 API 中删除。
      猜你喜欢
      • 1970-01-01
      • 2012-12-12
      • 2011-07-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-19
      • 2019-10-29
      • 2022-08-24
      • 2015-02-10
      相关资源
      最近更新 更多