我怎样才能获得手机的ICCID号码?

时间:2012-03-17 16:51:01

标签: android

如何获取手机的ICCID号码?

我查看了TelephonyManager类,但没有找到获取ICCID号码的方法,只有一种方法可以判断ICC卡是否存在。

4 个答案:

答案 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)

最好不要使用它,因为这是最近restrictedrecently on Android 10一样的标识符之一。

在Android 11(API 30)上,即使您不定位它,您也很可能只会得到一个空字符串。

使用的recommendationgetSubscriptionId(需要READ_PHONE_STATE权限)。

reason

返回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上查看