web-dev-qa-db-ja.com

getLine1Number()nullではなく空白を返します

携帯電話番号を取得したいのですが。私は次のコード参照を使用しました Alex Volovoy'sこのリンク

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

Log.d("msg", "Phone : "+mPhoneNumber);

Logcatの出力:

Simcard電話なしの返品:

02-01 17:22:45.472: D/msg(29102): Phone : null

Simcardの場合:

02-01 17:22:45.472: D/msg(29102): Phone : 

<uses-permission Android:name="Android.permission.READ_PHONE_STATE"/>inAndroidManifest.xmlでも許可を得ています

だから私は何をすべきですか?間違いはありますか?

11
Pratik Butani

デバイスから電話番号を取得するには、まずデバイスに自分の電話番号を設定する必要があります。

設定->電話について->ステータス->私の電話番号

インドのように、SIMでは各オペレーターの電話番号を利用できません。Simはどのメモリにも電話番号を持っていないため、WEこれらの接続から電話番号を取得できません。ただし、一部の国やオペレーターはSIMに電話番号を保存し、それらを取得できます。これをすべてのデバイスで機能させるには、次の2つの戦略を採用できます。

この問題を回避するために、エラーをキャッチしてそれに応じて作業することができます。Like:

TelephonyManager tMgr = (TelephonyManager) 
                 ShowMyLocation.this.getSystemService(Context.TELEPHONY_SERVICE);

String MyPhoneNumber = "0000000000";

try 
{
    MyPhoneNumber =tMgr.getLine1Number();
}
catch(NullPointerException ex)
{
}

if(MyPhoneNumber.equals("")){
    MyPhoneNumber = tMgr.getSubscriberId();
}
16
Ankit

テレフォニーマネージャーが空白を返したときに電話番号を取得する別の解決策があります。お役に立てば幸いです。

これが私のサンプルコードです:

public static final String main_data[] = {
            "data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"
    };


        object object = (TelephonyManager) context.getSystemService("phone");
        if (!TextUtils.isEmpty(((TelephonyManager) (object)).getLine1Number())) {

        }
        object = context.getContentResolver().query(Uri.withAppendedPath(Android.provider.ContactsContract.Profile.CONTENT_URI, "data"), main_data, "mimetype=?", new String[]{
                "vnd.Android.cursor.item/phone_v2"
        }, "is_primary DESC");
        if (object != null) {
            do {
                if (!((Cursor) (object)).moveToNext()) {
                    break;
                }

             if (s.equals("vnd.Android.cursor.item/phone_v2")) {
                    String s1 = ((Cursor) (object)).getString(4);
                    boolean flag1;
                    if (((Cursor) (object)).getInt(5) > 0) {
                        flag1 = true;
                    } else {
                        flag1 = false;
                    }
                    Toast.makeText(SampleActivity.this, "Phone:-" + s1, Toast.LENGTH_LONG).show();
                }
            } while (true);
            ((Cursor) (object)).close();
        }

また、次の2つの権限を追加することを忘れないでください。

<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.READ_PROFILE" />
0
Hardik Mehta