Android 我怎样才能得到电话的ICCID号码?

Android 我怎样才能得到电话的ICCID号码?,android,Android,我怎样才能得到电话的ICCID号码 我查看了TelephonyManager类,但没有找到获取ICCID编号的方法,只有一种方法可以告诉您ICC卡是否存在。我相信将获取ICCID Android 5.1的更新(学分) 为(API 22)添加了“多SIM卡支持”。 您可以使用 SubscriptionManager sm=SubscriptionManager.from(mContext); //它返回一个列表,其中包含每个simcard的SubscriptionInfo实例 //还有其他方法可以

我怎样才能得到电话的ICCID号码

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

我相信将获取ICCID

Android 5.1的更新(学分)

为(API 22)添加了“多SIM卡支持”。 您可以使用

SubscriptionManager sm=SubscriptionManager.from(mContext);
//它返回一个列表,其中包含每个simcard的SubscriptionInfo实例
//还有其他方法可以检索SubscriptionInfo(请参见[2])
List sis=sm.getActiveSubscriptionInfoList();
//获取第一个订阅信息
SubscriptionInfo si=sis.get(0);
//获取iccId
字符串iccId=si.getIccId();
您将需要许可:(信用证)



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

需要在AndroidManifest.xml中设置的权限

<uses-permission android:name="android.permission.READ_PHONE_STATE" />

简单C#

使用System.Collections.Generic;
使用Android.Telephony;
// ...
创建时受保护的覆盖无效(捆绑包)
{
base.OnCreate(bundle);
//需要,android.permission.READ\u PHONE\u状态
SubscriptionManager sm=Android.Telephony.SubscriptionManager.From(Android.App.Application.Context);
IList sis=sm.ActiveSubscriptionInfo列表;
SubscriptionInfo si=sis[0];
字符串载体=si.CarrierName;
字符串iccId=si.iccId;
字符串phoneNum=si.Number;
系统。诊断。调试。写入线(“载波:”+载波);
系统.诊断.调试.写线(“SIM卡IccId:+IccId”);
System.Diagnostics.Debug.WriteLine(“电话号码:+phoneNum”);
//奖金,获得IMEI Id(又名DeviceId)
TelephonyManager tm=(TelephonyManager)GetSystemService(Android.Content.Context.TelephonyService);
字符串deviceId=tm.deviceId;
System.Diagnostics.Debug.WriteLine(“设备Id:+deviceId”);
}
SubscriptionManagerSubscriptionInfo都位于Android.Telephony命名空间下


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

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

在Android11(API 30)上,即使您没有将其作为目标,也很可能只会得到一个空字符串

取而代之的是要使用的内容(需要READ\u PHONE\u STATE许可)

委员会:

返回ICC ID。从API级别30开始,如果 呼叫应用程序已被授予READ_PRIVILEGED_PHONE_状态 权限,具有运营商权限(请参阅 TelephonyManager#拥有CarrierPrivileges),或是设备所有者或 已被授予READ_PHONE_STATE权限的配置文件所有者。 配置文件所有者是在设备上拥有托管配置文件的应用程序; 有关更多详细信息,请参见工作配置文件。不推荐配置文件所有者访问 并将在将来的版本中删除

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

如果你不满足这些要求(你通常也不满足),你可以使用它

final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();
final SubscriptionManager SubscriptionManager=SubscriptionManager.from(上下文);
最终列表activeSubscriptionInfoList=subscriptionManager.getActiveSubscriptionInfoList();

然后,您可以使用
subscriptionInfo.getIccId()

根据,iccid的位数为20位,但此方法返回一个19位数字。要备份,我的ATT SIM卡有20位数字。对于不同的运营商,这可能是不同的。我已经多次测试了该功能,它总是能满足我的需要,尽管我还没有检查它返回的字符数。我的理解是SIM序列号和ICCID是一样的。当设备插入多个SIM时会发生什么@Reed@Reed ... 我已经与不同的SIM卡提供商检查了上述代码,ID会随着设备中SIM卡的变化而变化。@VladMatvienko,因为此方法使用SubscriptionManager,我相信答案是肯定的。尽管如此,还是可以尝试一下。ICCID号码是否取决于SIM卡类型,如Airtel、Idea、Vodaphone公司供应商?请帮我接电话it@RavindraKushwaha我不知道,但正如我写的,建议不要使用它。谢谢你的建议!!!我有一个问题,请帮助我从它,如何才能唯一地识别任何设备?有什么方法或技巧可以做到这一点吗?谢谢again@RavindraKushwaha不幸的是,谷歌决定对Android版本的限制越来越大,所以从技术上来说,你可以从你得到的东西中收集所有你能收集到的东西,但要知道,最终你会(而且可能已经是这样)得到多个设备,它们拥有你生成的相同的“ID”。目前还没有可靠的方法来识别设备。您可能会得到一个“足够好”的解决方案,但它永远不会100%可靠。例如,获取设备ID的一种方法是“android.os.Build”的各个字段。@RavindraKushwaha好的,我想我有一件事你可以做,但只有在特定的情况下才能做:。例如,如果您的应用程序是默认的SMS应用程序,则可以获取设备的序列号。可能还有其他类似的事情。我不知道。我只是建议不要管这个主意。
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);
}
final SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
final List<SubscriptionInfo> activeSubscriptionInfoList = subscriptionManager.getActiveSubscriptionInfoList();