如何获取手机的ICCID号码?
我查看了TelephonyManager类,但没有找到获取ICCID号的方法,只有一个方法可以判断ICC卡是否存在。
发布于 2012-03-18 01:58:52
我相信getSimSerialNumber()会得冰毒的。
适用于安卓5.1的更新(信用Erick M Sprengel)
为Android 5.1 (API22)增加了“多SIM卡支持”。您可以使用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();您需要权限:(credit Damian)
<uses-permission android:name="android.permission.READ_PHONE_STATE" />发布于 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,如果不满足这些要求之一,则返回空字符串”。对于第三方应用,这意味着你可能总是得到一个空字符串。
如果你不满足这些条件(通常也不会),你可以使用它。
final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();然后,对于它们中的每一个,都可以使用subscriptionInfo.getIccId()。
发布于 2016-10-06 22:38:28
@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);
}SubscriptionManager和SubscriptionInfo都位于Android.Telephony名称空间下
实话实说,这个例子需要在飞行中激活我的手机,而不是手边有SIM卡工具来把它拔出来。而且,我的眼睛也不是以前的样子了。在gist.github.com上的DroidTelephonySimInfo.cs上查看
https://stackoverflow.com/questions/9751823
复制相似问题