如何以编程方式获取设备的电话号码

And*_*iya 26 android phone-number telephonymanager

我正在尝试使用以下方法获取电话:

private String getMyPhoneNumber() {
    TelephonyManager mTelephonyMgr;

    mTelephonyMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
    //String imsi = mTelephonyMgr.getSubscriberId();
    String phnNo = mTelephonyMgr.getLine1Number();
    if (phnNo == null) {
        phnNo = getNoFromWatsApp();
    }
    return phnNo;
}

private String getNoFromWatsApp(){
    AccountManager am = AccountManager.get(this);
    Account[] accounts = am.getAccounts();
    String phoneNumber = "";

    for (Account ac : accounts) {
        String acname = ac.name;
        String actype = ac.type;
        // Take your time to look at all available accounts
        if(actype.equals("com.whatsapp")) {
            phoneNumber = ac.name;
        }
    }
    return phoneNumber;
}
Run Code Online (Sandbox Code Playgroud)

但每次我得到一个空电话号码.我甚至试图从WhatsApp获得电话号码,但它正在返回"WhatsApp"而不是电话号码.有没有其他方法可以解决这个问题?

Nis*_*hia 37

使用以下代码:

TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
Run Code Online (Sandbox Code Playgroud)

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

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 
Run Code Online (Sandbox Code Playgroud)

但请记住,此代码并不总是有效,因为手机号码取决于SIM卡和网络运营商/手机运营商.

此外,尝试检查电话 - >设置 - >关于 - >电话身份,如果您能够在那里查看号码,从上面的代码获取电话号码的概率更高.如果您无法在设置中查看电话号码,那么您将无法通过此代码获取!