嗨,我正在编写一个 Android 应用程序,它只允许注册的手机用户使用。如何获取android应用程序所在的电话号码。谢谢
5 回答
您可以使用以下代码获取手机号码
TelephonyManager telephonyManager = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String mMobileNo = telephonyManager.getLine1Number();
在 AndroidManifest.xml 中添加以下权限
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
问题:它可以为空
根据文档.getLine1Number()
“返回第 1 行的电话号码字符串,例如,GSM电话的MSISDN。如果不可用,则返回 null。”
显然.getLine1Number()
是从 SIM 卡中读取此信息,因此如果运营商设置了 MSISDN 字段,它将返回其值,如果他们没有设置此字段,则返回 null。
在您的情况下,您的 SIM 卡可能没有由运营商填充此字段。
欲了解更多信息,您可以访问此。
解决方案
这不是验证手机号码的正确方法,你可以像whatsapp那样做,你可以从这个链接找到它。
TelephonyManager
是一种方法:
TelephonyManager tm=(TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
number = tm.getLine1Number();
请记住,它需要:READ_PHONE_STATE
许可。
调用getLine1Number()将为TelephonyManager
您完成。
TelephonyManager mTelephonyManager=(TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
userPhoneNumber = mTelephonyManager.getLine1Number();
文档摘录:
公共字符串 getLine1Number ()
在 API 级别 1 中添加 返回第 1 行的电话号码字符串,例如 GSM 电话的 MSISDN。如果不可用,则返回 null。
需要权限:READ_PHONE_STATE
我不会对电话号码使用上述任何技术,因为这些 api 在所有电话中都不一致。Spice、Micromax 和许多三星手机不返回电话号码。使用api很好地猜测用户的电话号码,但不要忘记提示让用户更正。
HTC 手机在这方面要好得多,该 API 在所有 HTC 手机中都运行良好。
TelephonyManager tMgr =(TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
mPhoneNumber = tMgr.getLine1Number();
经许可:READ_PHONE_STATE