如何检查SIM卡是否激活?

4
我有一个使用情况,需要检查设备中SIM卡是否处于激活状态。在旧设备上,可以使用TelephonyManager获取SIM状态并检查是否为SIM_STATE_READY。问题出现在API 22及以上版本中。
使用SubscriptionManager时,当调用getActiveSubscriptionInfoList时,它会向我发送关于所有SIM卡的详细信息,即使我已将它们关闭。我阅读了SubscriptionManager的文档,但没有找到类似的方法来检查SIM卡状态。在API 22及以上版本中使用TelephonyManager仅提供有关默认SIM卡的信息,我想了解双SIM卡手机中两个插槽的情况。此外,在TelephonyManager中发现了getSimState的重载变体,它接受插槽作为参数,但该方法是从API 26开始引入的。我希望能够在API 22-25中使用可行的解决方案。
是否有一种方法可以确定即使SIM卡存在于设备中,它也处于非激活状态?

你有检查过这个链接吗?https://dev59.com/IW865IYBdhLWcg3wHKxe - Rahul Arora
@RahulArora 那个链接提到获取不同插槽的设备ID,这只能确认插槽是否存在,但无法告诉我SIM卡是否处于活动状态。 - Himanshu Prasad
@HimanshuPrasad 我想你在询问 API 22 中可用的 getActiveSubscriptionInfoList,请查看此文档 - Tanveer Munir
@TanveerMunir 如我所提問的,即使我在手機設置中關閉SIM卡,該方法仍會返回SIM卡詳細信息。 - Himanshu Prasad
@HimanshuPrasad 我发表了我的答案,希望对你有用。 - Tanveer Munir
显示剩余2条评论
2个回答

0
 TelephonyManager manager = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
if (manager.getPhoneCount() == 2) {
  // Dual sim
}

这里放例子


0

您可以通过以下方式检查设备是否为双卡:

    SubscriptionManager sManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
        SubscriptionInfo infoSim1 = sManager.getActiveSubscriptionInfoForSimSlotIndex(0);
        SubscriptionInfo infoSim2 = sManager.getActiveSubscriptionInfoForSimSlotIndex(1);
        int count = 0;
        if (infoSim1 != null ) {
            count++;
        }
        if (infoSim2 != null){
            count++;
        }

count决定了有多少个SIM卡是活动的。

或者

你可以得到计数然后逐个检查。

sManager.getActiveSubscriptionInfoCount()

希望它能工作。


1
正如我所提到的,我已经尝试过这个了。即使你从手机设置中关闭SIM卡,返回的对象也不会为空。 - Himanshu Prasad
你提到你正在使用 getActiveSubscriptionInfoList 这个方法而不是 getActiveSubscriptionInfoForSimSlotIndex(0)。根据文档,如果 SIM 卡不处于活动状态,则它会返回 null。 - Tanveer Munir
getActiveSubscriptionInfoList 返回一个数组,而 getActiveSubscriptionInfoForSimSlotIndex 根据插槽单独返回信息。它们都返回已存在但关闭的 SIM 卡的信息。 - Himanshu Prasad
@HimanshuPrasad 是的,我知道,但根据文档,如果SIM卡未激活,则返回null。 - Tanveer Munir
@TanveerMunir 如果可能的话,请分享文档链接。 - Mohd Qasim
禁用SIM卡后,获取"SubscriptionInfo"对象不应为空值。 - Mohd Qasim

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接