Android 在安卓系统中获取自己的电话号码(许多问题已测试但未成功)?

Android 在安卓系统中获取自己的电话号码(许多问题已测试但未成功)?,android,phone-number,telephonymanager,Android,Phone Number,Telephonymanager,我已经开发了一个android应用程序,但是我需要获取手机所有者的电话号码。我在stackoverflow中看到了很多问题和答案,但没有一个适合我 我使用的是安卓2.2: 我已经测试了这段代码,但什么也没发生: TelephonyManager phoneManager = (TelephonyManager) getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);

我已经开发了一个android应用程序,但是我需要
获取
手机所有者的电话号码
。我在stackoverflow中看到了很多问题和答案,但没有一个适合我

我使用的是安卓2.2:

我已经测试了这段代码,但什么也没发生:

  TelephonyManager phoneManager = (TelephonyManager) 
                getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
            String phoneNumber = phoneManager.getLine1Number();
我在我的清单文件
READ\u PHONE\u STATE
中添加了权限,在我的设置中,我看不到电话号码:/

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

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

编辑: 在我的国家,我们可以使用USSD命令查看我们的编号,结果显示在对话框中,我可以读取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);

        }
    });

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

            Android doesn't support USSD service

帮助plz?

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

  • TelephonyManager.getLine1Number()通常返回null,但在很少有手机实际返回其他内容的情况下,答案是不可靠的,因为它从SIM卡返回原始电话号码,由于电话号码的可移植性,该号码很少是手机当前使用的电话号码

  • 如果安装了WhatsApp,那么破解是一种有趣的方法不幸的是,这已停止工作-WhatsApp不再使用已验证的电话号码作为帐户名创建Android帐户。

  • 许多需要这些信息的应用程序都会进行往返短信交换,因为发送的短信会携带电话号码。(但如果你这样做,请注意,许多人反对支付短信费用,这很可能是一条国际短信,收费很高,因此很可能会在Play store给你一个不好的评价)


请注意,尽管在西方市场并不常见,但双模安卓手机(包括新款诺基亚X)的数量在不断增加,因此手机和手机号码之间没有1:1的对应关系。如果你的应用程序运行在没有电话号码的平板电脑上,你也会遇到问题。

我认为这是不可能的

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

我也遇到过同样的问题。这取决于服务提供商。因此,对于一些模拟人生,它可能返回自己的电话号码,也可能不返回自己的电话号码

请尝试以下代码以获取设备的移动电话号码

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
你也可以下载我的工作副本。i、 e.
我希望你能从中获得灵感。

你在测试什么样的设备?当你使用
时会得到什么。getLine1Number
?无效的空字符串?你是在模拟器中测试还是在真实设备中测试?我在真实设备(三星Galaxy Pocket)中测试过,我得到的是空字符串,因为它不可用。我认为不存在真正的解决方案(相同的代码返回我的旧电话号码,所以我认为这不是获得它的最佳方式)。我找到了这个答案,它依赖于Whatsapp。。听起来似乎是在大多数设备上获取电话号码的最佳方式。自Android 4.2.2以来,USSD交互已被删除。你可以找到票的问题
android.permission.READ_PHONE_STATE in Android Manifest file