首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何获取手机的ICCID号码?

如何获取手机的ICCID号码?
EN

Stack Overflow用户
提问于 2012-03-18 00:51:01
回答 3查看 43.5K关注 0票数 10

如何获取手机的ICCID号码?

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-18 01:58:52

我相信getSimSerialNumber()会得冰毒的。

适用于安卓5.1的更新(信用Erick M Sprengel)

Android 5.1 (API22)增加了“多SIM卡支持”。您可以使用SubscriptionManager而不是getSimSerialNumber

代码语言:javascript
复制
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();

您需要权限:(credit Damian)

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
票数 17
EN

Stack Overflow用户

发布于 2020-09-13 16:21:04

最好不要使用它,因为这是最近获得的标识符之一,就像一样。

在Android 11 (API 30)上,即使你没有瞄准它,你也很可能只得到一个空字符串。

要使用的改为 (需要READ_PHONE_STATE权限)。

The

返回ICC。从接口级别30开始,如果调用的app已被授予READ_PRIVILEGED_PHONE_STATE权限、具有运营商权限(参见TelephonyManager#hasCarrierPrivileges),或者是被授予READ_PHONE_STATE权限的设备所有者或配置文件所有者,则返回ICC。配置文件所有者是在设备上拥有托管配置文件的应用程序;有关更多详细信息,请参阅工作配置文件。配置文件所有者访问权限已弃用,并将在未来版本中删除。

因此,它返回“ICC ID,如果不满足这些要求之一,则返回空字符串”。对于第三方应用,这意味着你可能总是得到一个空字符串。

如果你不满足这些条件(通常也不会),你可以使用它。

代码语言:javascript
复制
final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();

然后,对于它们中的每一个,都可以使用subscriptionInfo.getIccId()

票数 5
EN

Stack Overflow用户

发布于 2016-10-06 22:38:28

@Jakar,非常感谢!下面是使用Xamarin / Mono.Android的C#中的相同代码

需要AndroidManifest.xml中的权限集

代码语言:javascript
复制
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

简单的C#

代码语言:javascript
复制
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);
}

SubscriptionManagerSubscriptionInfo都位于Android.Telephony名称空间下

实话实说,这个例子需要在飞行中激活我的手机,而不是手边有SIM卡工具来把它拔出来。而且,我的眼睛也不是以前的样子了。在gist.github.com上的DroidTelephonySimInfo.cs上查看

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9751823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档