在android中获取我的电话号码

我怎样才能在android中获得我的电话号码

当我使用:

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

并使用:

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

返回Null

为什么?

从文档 :

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

所以你已经做好了,但没有电话号码存储。

如果你得到null ,你可以显示一些东西让用户input他/她自己的电话号码。

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

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

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

在这里回答

使用下面的代码:

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

在AndroidManifest.xml中,给出以下权限:

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

但请记住,此代码并不总是工作,因为手机号码取决于SIM卡和networking运营商/手机运营商。

此外,请尝试检查电话 – >设置 – >关于 – >电话身份 ,如果你能够在那里查看号码,从上面的代码得到电话号码的可能性更高。 如果您无法在设置中查看电话号码,则无法通过此代码获取!

build议的解决方法:

  1. 从用户手动input用户的电话号码。
  2. 通过短信向用户的手机号码发送密码。
  3. 要求用户input密码以确认电话号码。
  4. 将该号码保存在sharedpreference中。

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

 private String getMyPhoneNumber(){ TelephonyManager mTelephonyMgr; mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); return mTelephonyMgr.getLine1Number(); } private String getMy10DigitPhoneNumber(){ String s = getMyPhoneNumber(); return s.substring(2); } 

方法1:

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

有了下面的许可

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

方法2:

还有另外一种方法,你将能够得到你的电话号码,我还没有在多个设备上testing过,但是上面的代码并不是每次都在工作。

尝试下面的代码:

 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" /> 

希望这有助于,谢谢!

Robi Code是为我工作,只要把!如果!如果电话号码为空,用户可以填写他/她自己的电话号码。

 editTextPhoneNumber = (EditText) findViewById(R.id.editTextPhoneNumber); TelephonyManager tMgr; tMgr= (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String mPhoneNumber = tMgr.getLine1Number(); if (mPhoneNumber != null){ editTextPhoneNumber.setText(mPhoneNumber); }