Android getLine1Number()返回空白,而不是null

Android getLine1Number()返回空白,而不是null,android,telephonymanager,Android,Telephonymanager,我想获取设备的移动电话号码。我使用了 TelephonyManager tMgr = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE); String mPhoneNumber = tMgr.getLine1Number(); Log.d("msg", "Phone : "+mPhoneNumber); Logcat中的输出: TelephonyManager tMgr = (TelephonyManager)

我想获取设备的移动电话号码。我使用了

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

Log.d("msg", "Phone : "+mPhoneNumber);
Logcat中的输出:

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();
}
没有Simcard手机退货: 使用Simcard: 我还获得了AndroidManifest.xml中的权限

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

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

那我该怎么办?有什么错误吗?

要从设备中获取电话号码,首先必须在设备上设置自己的电话号码,只需通过以下步骤:

设置->关于电话->状态->我的电话号码

每个运营商的SIM卡上都没有电话号码,比如在印度,SIM卡内存中没有电话号码,所以我们无法通过这些连接获取电话号码。然而,一些国家和运营商已经在SIM卡上存储了电话号码,我们可以获取这些号码。为了使其适用于所有设备,我们可以采用两种策略:

为了避免此问题,我们可以捕获错误并相应地进行处理。比如:

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();
}

我有另一个解决方案,当电话经理返回空白时获取电话号码。我希望这对你有帮助

以下是我的示例代码:

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();
        }
另外,不要忘记添加这两个权限:

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


tMgr.getSubscriberId()
用于什么?
设置->关于电话->状态->我的电话号码是
未知的
谢谢,但我想要电话号码。这意味着你的电话没有存储我上面定义的任何电话号码。。因此,您可以尝试tMgr.getSubscriberId();它返回唯一的用户ID,例如,GSM电话的IMSI。或者,你可以从4向下投票获得它。我认为Sim序列号是唯一的。你也可以用这个。字符串getSimSerialNumber=tMgr.getSimSerialNumber()@pratik如果您能够获得电话号码,请将其标记为正确。上述代码中的“s”是什么?我得到这个错误。无法解析符号“s”@Arjun请将“s”声明为值为vnd.android.cursor.item/phone_v2的字符串。