我想获取Android设备的电话号码。我使用这个代码:
TelephonyManager tm = (TelephonyManager)this.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);
String phoneNumber= tm.getLine1Number();
在我的手机(HTC Wildfire)上,我无法获取电话号码 - 我得到的只是空字符串。如果我在模拟器上运行代码,通常会显示电话号码。
如果我进入“设置”=>“关于手机”=>“手机身份”->“电话号码”,则电话号码为“未知”。
问题出在哪里?我的 SIM 卡有问题吗?
我们的项目中也遇到了同样的问题。结论是,这取决于SIM卡。
我们发生了什么:
其他论坛也有报道。
最终我们决定向用户询问电话号码。实际上,涉及更多一点:
if( "SIM card present" && "cannot read the cell number") "ask user";
。否则我们会一直骚扰没有 SIM 卡的用户。
使用 SIM 卡序列号代替电话号码,该序列号始终存在且始终是有效值。
telephonyManager.getSimSerialNumber();
SIM序列号至少在运营商内是唯一的。所以结合
telephonyManager.getNetworkOperator();
您将拥有一个国家/地区内订阅者的唯一标识符。
这与
结合 telephonyManager.getNetworkCountryIso();
您将拥有订阅者的全球唯一标识符。
希望这会有所帮助。
干杯。
SIM卡存储电话号码,您可以编辑它。不能说适用于 Android,但在 WM 上您可以轻松编辑存储在 SIM 卡上的电话号码。 当然,这并不意味着您可以随时更改您的电话号码。实际上,您可以自由地在那里写下任何您喜欢的数字,并且程序会相信,这是您的真实数字:)
当我将 SIM 卡移至新手机时,有时会发现电话号码未显示在“设置”->“关于手机”->“状态”->“我的电话号码”中。
我的数据点:
如果 SIM 卡允许,则可以使用电话号码。 在我们公司我发现只有一张SIM卡,是允许取号的。我正在所有 Android 设备上测试此 SIM 卡。一切都好。 getLine1Number() 没问题。 现在我正在寻找其他 SIM 卡的电话号码。已发送短信到我们的短信服务器或其他Android设备(带有短信处理)
我使用的SIM卡只允许数据传输。它不允许打电话。
当我尝试使用
getLine1Number()
获取电话号码时,我得到空字符串。
使用以下函数在java中获取电话号码
READ_PHONE_STATE permission required to get phone number
public static String getPhoneNumber(Context context) {
// Check for necessary permissions
if (ContextCompat.checkSelfPermission(context, android.Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// permission not granted
return null;
}
String phoneNumber = null;
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
// For Android 13 and above (Tiramisu)
SubscriptionManager subscriptionMgr = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
if (subscriptionMgr != null) {
phoneNumber = subscriptionMgr.getPhoneNumber(SubscriptionManager.DEFAULT_SUBSCRIPTION_ID);
}
} else {
// For devices below Android 13
TelephonyManager phoneMgr = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (phoneMgr != null) {
phoneNumber = phoneMgr.getLine1Number();
}
}
} catch (SecurityException e) { // Handle permission related errors
e.printStackTrace();
} catch (Exception e) { // Handle any other exceptions
e.printStackTrace();
}
// Remove any leading "+" from phone number if it's present
if (phoneNumber != null) {
phoneNumber = phoneNumber.replace("+", "");
}
// Return the phone number if it's available, otherwise return null
return !TextUtils.isEmpty(phoneNumber) ? phoneNumber : null;
}