44

Androidでユーザーの携帯番号を知りたいです。このコードを使用しましたが、番号を取得できません。

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

許可:

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

Androidモバイルに番号を保存することは必須ですか settings --> about phone --> status --> myphone number

これについて何か考えはありますか?

4

5 に答える 5

30

SIMのシリアルナンバーとSIM番号は固有のものだと思います。これを試して、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"/>

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

于 2012-12-27T07:31:52.807 に答える
10

電話番号、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"/>
于 2015-03-17T11:28:46.000 に答える
5

更新: 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をインストールしていない場合は取得できない可能性がありますが、とにかく試してみる価値があります. また、常にユーザーに確認を求める必要があることを忘れないでください。

于 2013-05-08T04:06:36.827 に答える
2

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

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

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

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

于 2012-12-27T07:58:06.177 に答える
-18

TelephonyManagerを使用してこれを行うことができます。

TelephonyManager t = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String number = t.getLine1Number();

使用したことがありますか

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
于 2012-12-27T07:29:53.437 に答える