如何获取手机的ICCID号码?
我查看了TelephonyManager类,但没有找到获取ICCID号码的方法,只有一种方法可以判断ICC卡是否存在。
答案 0 :(得分:10)
我相信getSimSerialNumber()
会得到iccid。
答案 1 :(得分:3)
Android 5.1的更新
已添加"多SIM卡支持" Android 5.1(API 22)。
您可以使用SubscriptionManager
。
getSimSerialNumber
SubscriptionManager sm = SubscriptionManager.from(mContext);
// it returns a list with a SubscriptionInfo instance for each simcard
// there is other methods to retrieve SubscriptionInfos (see [2])
List<SubscriptionInfo> sis = sm.getActiveSubscriptionInfoList();
// getting first SubscriptionInfo
SubscriptionInfo si = sis.get(0);
// getting iccId
String iccId = si.getIccId();
答案 2 :(得分:3)
最好不要使用它,因为这是最近restricted和recently on Android 10一样的标识符之一。
在Android 11(API 30)上,即使您不定位它,您也很可能只会得到一个空字符串。
使用的recommendation是getSubscriptionId(需要READ_PHONE_STATE权限)。
返回ICC ID。从API级别30开始,如果出现以下情况,则返回ICC ID: 调用应用已被授予READ_PRIVILEGED_PHONE_STATE 权限,具有运营商特权(请参阅 TelephonyManager#hasCarrierPrivileges),或者是设备所有者或 已被授予READ_PHONE_STATE权限的个人资料所有者。 配置文件所有者是在设备上拥有托管配置文件的应用; 有关更多详细信息,请参见工作资料。个人资料所有者访问权限已弃用 并将在以后的版本中删除。
,因此它返回“ ICC ID,如果不满足这些要求之一,则返回一个空字符串”。对于第三方应用程序,这意味着您可能总是会得到一个空字符串。
如果您不满足这些条件(通常不这样做),则可以使用它。
final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
然后对于每个选项,您都可以使用subscriptionInfo.getIccId()
。
答案 3 :(得分:0)
@Jakar,非常感谢!这里使用Xamarin / Mono.Android
在C#中使用相同的代码需要AndroidManifest.xml中设置的权限
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
简单的C#
using System.Collections.Generic;
using Android.Telephony;
// ...
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
// Requires, android.permission.READ_PHONE_STATE
SubscriptionManager sm = Android.Telephony.SubscriptionManager.From(Android.App.Application.Context);
IList<SubscriptionInfo> sis = sm.ActiveSubscriptionInfoList;
SubscriptionInfo si = sis[0];
string carrier = si.CarrierName;
string iccId = si.IccId;
string phoneNum = si.Number;
System.Diagnostics.Debug.WriteLine("Carrier: " + carrier);
System.Diagnostics.Debug.WriteLine("SIM Card IccId: " + iccId);
System.Diagnostics.Debug.WriteLine("Phone Number: " + phoneNum);
// Bonus, Get the IMEI Id (aka, DeviceId)
TelephonyManager tm = (TelephonyManager)GetSystemService(Android.Content.Context.TelephonyService);
string deviceId = tm.DeviceId;
System.Diagnostics.Debug.WriteLine("Device Id: " + deviceId);
}
在 Android.Telephony 命名空间
下找到 SubscriptionManager 和 SubscriptionInfo说实话,这个例子需要动态激活我的手机而不需要SIM卡工具就可以将其拉出来。而且,我的眼睛不是他们的用途。在gist.github.com上的DroidTelephonySimInfo.cs上查看