41

如何在 Android 中获取我的电话号码?当我使用:

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

并使用:

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

它返回null,为什么?

4

6 回答 6

23

文档中:

返回第 1 行的电话号码字符串,例如 GSM 电话的 MSISDN。如果不可用,则返回 null。

所以你做的一切都是正确的,但没有存储电话号码。

如果你得到null,你可以显示一些东西让用户自己输入电话号码。

于 2013-09-19T12:05:17.010 回答
11

如果您调用的函数返回null,则表示您的电话号码未在您的联系人列表中注册。

如果您只需要一个唯一号码而不是电话号码,则可以使用 sim 卡的序列号:

    TelephonyManager telemamanger = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    String getSimSerialNumber = telemamanger.getSimSerialNumber();  
于 2013-09-19T12:26:19.530 回答
9

正如这里回答的那样

使用以下代码:

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,如果您能够在此处查看号码,则从上述代码中获取电话号码的概率更高。如果您无法在设置中查看电话号码,那么您将无法通过此代码获取!

建议的解决方法:

  1. 获取用户的电话号码作为用户的手动输入。
  2. 通过 SMS 向用户的手机号码发送代码。
  3. 要求用户输入代码以确认电话号码。
  4. 将号码保存在 sharedpreference 中。

在应用程序的第一次启动期间,将上述 4 个步骤作为一次性活动执行。稍后,每当需要电话号码时,请使用共享首选项中可用的值。

于 2014-08-25T05:19:33.787 回答
2
private String getMyPhoneNumber(){
    TelephonyManager mTelephonyMgr;
    mTelephonyMgr = (TelephonyManager)
        getSystemService(Context.TELEPHONY_SERVICE); 
    return mTelephonyMgr.getLine1Number();
}

private String getMy10DigitPhoneNumber(){
    String s = getMyPhoneNumber();
    return s.substring(2);
}
于 2013-09-19T12:30:13.970 回答
1

方法一:

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

经以下许可

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

方法二:

还有另一种方法可以获得您的电话号码,我没有在多个设备上测试过,但上面的代码并非每次都有效。

试试下面的代码:

String main_data[] = {"data1", "is_primary", "data3", "data2", "data1", "is_primary", "photo_uri", "mimetype"};
Object object = 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;
        String s1 = ((Cursor) (object)).getString(4);
    } while (true);
    ((Cursor) (object)).close();
}

您将需要添加这两个权限。

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

希望这会有所帮助,谢谢!

于 2016-02-11T19:01:14.037 回答
0

Robi Code 对我有用,只需输入 if !null 以便如果电话号码为空,用户可以自己填写电话号码。

editTextPhoneNumber = (EditText) findViewById(R.id.editTextPhoneNumber);
TelephonyManager tMgr;
tMgr= (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();
if (mPhoneNumber != null){
editTextPhoneNumber.setText(mPhoneNumber);
}
于 2016-04-28T07:09:55.990 回答