以编程方式获取Android手机的电话号码

如何以编程方式获取运行个人android应用的设备的电话号码? android


#1楼

只是想在以上答案的以上说明中添加一些内容。 这也将为他人节省时间。 编程

在个人状况下,此方法未返回任何手机号码,返回了一个空字符串。 因为这种状况,我将本身的号码移植到了新的SIM卡上。 所以,若是我进入“设置”>“关于电话”>“状态”>“个人电话号码”,则会显示“未知”。 网络


#2楼

更新:该答案再也不可用,由于Whatsapp已中止将电话号码公开为账户名,请忽略此答案。

若是您没法经过电话服务得到解决方案,则实际上可能须要考虑其余解决方案。 app

到目前为止,您可使用AccountManager依赖于另外一个大型应用程序Whatsapp。 数百万的设备已安装了此应用程序,若是您没法经过TelephonyManager获取电话号码,则能够尝试一下。 this

容许: spa

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

码: code

AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccounts();

for (Account ac : accounts) {
    String acname = ac.name;
    String actype = ac.type;
    // Take your time to look at all available accounts
    System.out.println("Accounts : " + acname + ", " + actype);
}

检查WhatsApp账户的actype xml

if(actype.equals("com.whatsapp")){
    String phoneNumber = ac.name;
}

固然,若是用户未安装WhatsApp,则可能没法得到它,但仍是值得尝试的。 记住,您应该始终向用户询问确认信息。 字符串


#3楼

TelephonyManager不是正确的解决方案,由于在某些状况下,该号码未存储在SIM卡中。 我建议您应该在首次打开应用程序时使用共享首选项来存储用户的电话号码,而且该号码将在须要时使用。 get


#4楼

码:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

所需权限:

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

注意事项:

根据高度评价的评论,须要注意一些警告。 这能够返回null""甚至"???????" ,而且它能够返回再也不有效的旧电话号码。 若是您想要惟一标识设备的信息,则应改用getDeviceId()


#5楼

如我先前的答案中所述

使用如下代码:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();

在AndroidManifest.xml中,授予如下权限:

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

可是请记住,此代码并不老是有效,由于手机号码取决于SIM卡和网络运营商/手机运营商。

另外,请尝试在“ 电话”->“设置”->“关于”->“电话身份”中进行检查 ,若是您可以在那里查看号码,则从上述代码获取电话号码的可能性更高。 若是您没法在设置中查看电话号码,则没法经过此代码获取!

建议的解决方法:

  1. 从用户那里获取用户的电话号码做为手动输入。
  2. 经过短信将代码发送到用户的手机号码。
  3. 要求用户输入代码以确认电话号码。
  4. 将数字保存在sharedpreference中。

在应用程序首次启动期间,将上述4个步骤做为一次活动进行。 之后,每当须要电话号码时,请使用共享首选项中的可用值。

相关文章
相关标签/搜索