web-dev-qa-db-ja.com

Androidで現在のSIMカード番号を取得する方法は?

Androidのユーザーの携帯電話番号を知りたい。このコードを使用しましたが、数がわかりません。

TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); 
        String n = tm.getLine1Number();

許可:

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

番号をAndroid mobile settings --> about phone --> status --> myphone number

これについてのアイデアはありますか?

38
User

シムのシリアル番号とシム番号は一意だと思います。 simのシリアル番号とsim番号を取得するためにこれを試すことができます。マニフェストファイルに許可を追加することを忘れないでください。

TelephonyManager telemamanger = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
String getSimSerialNumber = telemamanger.getSimSerialNumber();
String getSimNumber = telemamanger.getLine1Number();

そして、Androidmanifest.xmlファイル。

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

問題がある場合はお知らせください。

27
Dipak Keshariya

電話番号、IMEI、SIMカードIDの取得

TelephonyManager tm = (TelephonyManager) 
            getSystemService(Context.TELEPHONY_SERVICE);        

SIMカードの場合は、getSimSerialNumber()を使用します

    //---get the SIM card ID---
    String simID = tm.getSimSerialNumber();
    if (simID != null)
        Toast.makeText(this, "SIM card ID: " + simID, 
        Toast.LENGTH_LONG).show();

電話の電話番号、getLine1Number()を使用します(一部のデバイスは電話番号を返しません)

    //---get the phone number---
    String telNumber = tm.getLine1Number();
    if (telNumber != null)        
        Toast.makeText(this, "Phone number: " + telNumber, 
        Toast.LENGTH_LONG).show();

電話のIMEI番号、getDeviceId()を使用

    //---get the IMEI number---
    String IMEI = tm.getDeviceId();
    if (IMEI != null)        
        Toast.makeText(this, "IMEI number: " + IMEI, 
        Toast.LENGTH_LONG).show();

必要な権限

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

更新:Whatsappがアカウント名としての電話番号の公開を停止したため、この回答は利用できなくなりました。この回答は無視してください。

================================================== ===============================

ほぼ6か月が経過しているので、これをあなたが検討したいと思うかもしれない代替ソリューションで更新すべきだと思います。

現在、AccountManagerを使用して、別の大きなアプリケーションWhatsappに依存できます。何百万ものデバイスにこのアプリケーションがインストールされており、TelephonyManagerを介して電話番号を取得できない場合は、これを試してみてください。

許可:

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

コード:

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

ArrayList<String> googleAccounts = new ArrayList<String>();
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を確認してください

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

もちろん、ユーザーがWhatsappをインストールしなかった場合は取得できませんが、試してみる価値はあります。また、ユーザーに確認を求めるようにしてください。

6
Chor Wai Chun

あなたはすべて正しいですが、問題はgetLine1Number()関数にあります。

getLine1Number()-このメソッドは、回線1の電話番号文字列、つまりGSM電話のMSISDNを返します。利用できない場合はnullを返します。

この方法は、一部の携帯電話でのみ機能しますが、すべての電話では機能しません。

そのため、sim(呼び出し以外)に従って操作を実行する必要がある場合は、getSimSerialNumber()を使用する必要があります。常に一意有効であり、常に存在です。

2