Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/211.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Android中获取当前的SIM卡号码?_Android_Phone Number_Telephonymanager_Sim Card - Fatal编程技术网

如何在Android中获取当前的SIM卡号码?

如何在Android中获取当前的SIM卡号码?,android,phone-number,telephonymanager,sim-card,Android,Phone Number,Telephonymanager,Sim Card,我想知道Android中的用户手机号。我用了这个密码,但我不知道号码 TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String n = tm.getLine1Number(); 许可: <uses-permission android:name="android.permission.READ_PHONE_STATE"/> <use

我想知道Android中的用户手机号。我用了这个密码,但我不知道号码

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

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

是否必须在android mobile
settings-->about phone-->status-->myphone number


对此有何想法?

您可以使用TelephonyManager执行以下操作:

TelephonyManager t = (TelephonyManager)getSystemService(TELEPHONY_SERVICE); 
String number = t.getLine1Number();
你用过吗

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

我认为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"/>


如果有任何问题,请告诉我。

您一切正常,但问题在于
getLine1Number()
函数

getLine1Number()-此方法返回线路的电话号码字符串 1,即GSM电话的MSISDN。如果不可用,则返回null

这种方法只适用于少数手机,但不是所有手机


因此,如果需要根据sim卡执行操作(而不是呼叫),则应使用
getSimSerialNumber()
。它总是唯一的有效的,并且它总是存在更新:由于Whatsapp已停止将电话号码作为帐户名公开,因此此答案不再可用,请忽略此答案。

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

它已经将近6个月了,我相信我应该用一个你可能要考虑的替代方案来更新它。 现在,您可以使用AccountManager依赖另一个大型应用程序Whatsapp。数以百万计的设备安装了此应用程序,如果您无法通过TelephonyManager获取电话号码,您可以试一试

许可:

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
当然,若用户并没有安装Whatsapp,你们可能不会得到它,但无论如何,它都值得一试。
请记住,您应该始终要求用户确认。

获取电话号码、IMEI和SIM卡ID

TelephonyManager tm = (TelephonyManager) 
            getSystemService(Context.TELEPHONY_SERVICE);        
对于SIM卡,请使用getSimSerialNumber()

手机的电话号码,请使用getLine1Number()(某些设备不返回电话号码)

IMEI电话号码,使用getDeviceId()

所需权限

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


您是否拥有读取手机状态权限?使用权限android:name=“android.permission.READ\u PHONE\u STATE”/>@Madhavi:取决于设备。因此,请确保您没有使用任何双卡或中文设备?这是常见的问题。。。。有些设备返回号码,有些设备不返回(或者它们有手机应用程序)。这是一个很好的算法,它对你很有用。请阅读问题描述。不要只是通过阅读标题来回答问题。至少在我的情况下,这是行不通的。它给出的是空字符串。我用安卓4.4在Nexus4上测试,用4.2.2在GalaxyGrand上测试,我写了上面的代码,但我的sim卡号码是空的。那么我想做什么呢?假设如果我用相同的电话号码更换sim卡,是否得到相同的sim序列号?在所有设备中获得空值getSimSerialNumber()函数返回一个字符串,其中包含提供商信息等。如果您想获取纯sim序列号,则必须获取最后14个号码sim号码s不是唯一的,因为此方法不会为所有具有sim卡的设备返回sim号码。返回应用程序名称而不是号码纤维(不是WhatsApp)将电话号码添加到名称字段!
    //---get the phone number---
    String telNumber = tm.getLine1Number();
    if (telNumber != null)        
        Toast.makeText(this, "Phone number: " + telNumber, 
        Toast.LENGTH_LONG).show();
    //---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"/>