为什么TelephonyManager无法从SIM卡获取电话号码?

时间:2011-07-20 08:10:41

标签: android

我使用TelephonyManager执行此操作,您可以访问下面给出的TelephonyManager方法

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

getLine1Number()的文档说如果数字“不可用”,此方法将返回null,但是没有说明该数字何时可用。

我还通过向您的Manifest添加以下内容来授予应用程序权限以进行此查询:

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

该号码始终为空或空...

虽然我也进行了交叉检查,我可以从该号码拨打电话(即插入SIM卡号码)

我已经浏览了大量文档,但没有任何帮助我从SIM获取电话号码以便在我的应用程序中使用..

关心,

Arpit Garg

2 个答案:

答案 0 :(得分:-1)

AFAIK,由于运营商的各种限制,TelephonyManager.getLine1Number()不可靠。 有一些基于java反射的黑客攻击,但因设备而异,因此这些黑客攻击有点无用[至少在支持的模型方面]

但是,如果您确实需要,可以找到合法的合法逻辑。通过短信提供商查询所有短信,并获取&#34; To&#34;号。

这个技巧的额外好处:1。如果设备中有多个SIM卡,您可以获得所有行号。

缺点:1。您需要SMS_READ权限[对不起]  2.您将获得设备中使用的所有SIM卡号码。用一些约束逻辑可以最小化这个问题,例如时间框架(仅在今天收到或发送短信)等。从其他人那里听到如何改进此案例将会很有趣。

答案 1 :(得分:-5)

你应该试试这个

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