在android中获取自己的电话号码(许多问题经过测试但没有工作)?

时间:2014-03-06 01:28:46

标签: android phone-number telephonymanager

我开发了一个Android应用程序,但我需要get the phone number the phone owner。我在stackoverflow中看到了很多问题和许多答案,但没有一个对我有用。

我使用 Android 2.2

我测试了这段代码,但没有发生任何事情:

  TelephonyManager phoneManager = (TelephonyManager) 
                getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
            String phoneNumber = phoneManager.getLine1Number();

我在清单文件READ_PHONE_STATE中添加了权限,在我的设置中我看不到电话号码:/

我已经看到了这些答案linkthis,这是我的问题

enter image description here

我知道我可以使用getDeviceId()获得一个唯一的ID,但是如果可能的话,我会得到号码电话。 你能提供更多信息吗? 有想法得到电话号码吗?

编辑: 在我的国家,我们可以使用USSD命令查看我们的号码,结果是在dialogBox中,我可以读取USSD响应中的数据吗?

我已经测试了这段代码,但没有得到:

@Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            String encodedHash = Uri.encode("#");
            String ussd = "*141*1" + encodedHash;
            startActivityForResult(new Intent("android.intent.action.CALL",
                    Uri.parse("tel:" + ussd)), 1);

        }
    });

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    Toast.makeText(getApplicationContext(),
            "USSD: " + requestCode + "  " + resultCode + " ", 1).show();

    if (requestCode == 1) {

        if (resultCode == RESULT_OK) {
            // String result=data.getStringExtra("result");
            String dd = data.toString();
            Toast.makeText(getApplicationContext(), dd, 1).show();
        }

    }

我还测试了一些例子,但结果是:

            Android doesn't support USSD service

帮助PLZ?

4 个答案:

答案 0 :(得分:6)

正如您所发现的那样,通过许多问题和答案,我猜你已经看过了,没有可靠的方法来获取这些信息:

  • TelephonyManager.getLine1Number()通常会返回null,但在罕见的手机上它实际上返回了其他内容,因为它从SIM返回原始电话号码,因为电话号码可移植性,所以无法回答答案很少是手机当前使用的电话号码

  • 如果安装WhatsApp,对look for the account name used by WhatsApp的攻击是一种有趣的方法。 不幸的是,现在已经停止工作了 - WhatsApp不再创建Android帐户了已验证的电话号码作为帐户名称。

  • 许多需要此信息的应用程序都会进行往返短信交换,因为外发短信会携带电话号码。 (虽然如果你这样做,请注意许多人反对支付短信的费用,这可能是一个高价的国际短信,所以很可能会在Play商店给你一个糟糕的评论。)

请注意,虽然在西方市场并不常见,但是有越来越多的双卡Android手机(包括新的诺基亚X),因此手机和手机号码之间没有1:1的对应关系。如果你的应用程序在没有电话号码的平板电脑上运行,你也会遇到问题。

答案 1 :(得分:3)

我认为那是不可能的。

替代解决方案:这可能不是一个完全可靠的解决方案,但我认为应该有效。 用户总是会添加多个帐户,例如facebook,google,twitter等。 提示用户允许共享个人信息并从那里获取号码。

答案 2 :(得分:1)

我确实遇到过同样的问题。它依赖于服务提供商。因此,对于某些SIM卡,它可能会也可能不会返回自己的电话号码。

答案 3 :(得分:0)

尝试使用以下代码获取手机号码。

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

String sDeviceID = mTelephonyMgr.getDeviceId();
String sSimSerial = mTelephonyMgr.getSimSerialNumber(); 

设置以下权限

android.permission.READ_PHONE_STATE in Android Manifest file

您也可以下载我的工作副本。即 Getting registred email id from android device 。 我希望你能从中获得灵感。