2011-07-20 44 views
3

我用TelephonyManager做到这一点,下面TelephonyManager为什么无法从SIM中获取电话号码?

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

getLine1Number()文档说这种方法将返回null如果该号码是“不可用”为给定的,您可以访问TelephonyManager小号的方法,但它并没有说什么时候该号码可能可用。

我也给申请许可通过添加以下到您的清单,使这个查询:

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

的数量始终是空白或空...

虽然我也交叉检查和调用我能够从该号码(即插入SIM卡)

我已经经历了无数的文件,但没有任何帮助我从SIM卡获取电话号码,以便在我的应用程序中使用..

与问候,

Arpit加尔格

+1

您无法可靠地获取电话号码。使用telephonyManager.getLine1Number()仅适用于SIM卡上存在电话号码。一些SIM卡上没有电话号码。在这种情况下,你无法得到它。 –

+0

类似的:http://stackoverflow.com/questions/5134398/telephonymanager-getline1number-failing/ – trante

回答

-5

你应该试试这个

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

我也尝试这个,但没有找到确切的解决方案 –

+0

这是什么试过,不工作.. – Siddharth

0

据我所知,TelephonyManager.getLine1Number()是不可靠的,由于从运营商的各种约束。 有一些基于Java反射的黑客攻击,但因设备而异,因此使这些黑客毫无用处[至少在支持模式方面]

但是,如果您确实需要找到该号码,则存在合法的合法逻辑所以。通过短信提供商查询所有短信并获取“收件人”号码。

这个技巧的其他好处:1.如果设备中有多个SIM卡,你可以得到所有的线路号码。

缺点:1.您需要SMS_READ权限[对不起] 2.您将获得设备中曾经使用的所有SIM卡号码。这个问题可以通过一些约束逻辑来最小化。时间范围(仅在今天收到或发送的短信)等。听取其他人关于如何改善这种情况的信息会很有趣。

相关问题