web-dev-qa-db-ja.com

プログラムでデバイスの電話番号を取得する方法

私は次の方法を使用して電話番号を取得しようとしています:

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;
}

しかし、空の電話番号を取得するたびに。 WhatsAppから電話番号を取得しようとしましたが、電話番号ではなく「WhatsApp」が返されます。この問題を解決する他の方法はありますか?

25
Android Priya

以下のコードを使用してください:

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

AndroidManifest.xmlで、次の権限を付与します。

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

ただし、携帯電話番号はSIMカードとネットワーク事業者/携帯電話キャリアに依存しているため、このコードは常に機能するとは限りません。

また、Phone-> Settings-> About-> Phone Identityをチェックインしてみてください。番号を表示すると、上記のコードから電話番号を取得する可能性が高くなります。設定で電話番号を表示できない場合、このコードを介して取得することはできません!

37