我有一些非常困难的时间来解决这个问题,最后我找到了一个解决方案,尽管我只在api 22级以上测试过它.
您必须查看收到的意图中的额外信息.在我的情况下,意图的额外Bundle中有两个键是有用的:“slot”和“subscription”.
这是一个例子:
public class IncomingSms extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
// Retrieves a map of extended data from the intent.
Bundle bundle = intent.getExtras();
int slot = bundle.getInt("slot", -1);
int sub = bundle.getInt("subscription", -1);
/*
Handle the sim info
*/
}
}
我没有找到关于Bundle中的密钥的文档,所以这可能是设备/制造商的依赖,我可以想象密钥是不同的或类似的东西.您可以通过转储捆绑包的密钥集来验证这一点:
Set keyset = bundle.keySet();
编辑:
有关SIM卡电话号码的信息可能根本不可用,因为如果SIM卡未存储在SIM卡上,则很可能无法查询,但所有其他信息都可通过SubscriptionManager获得:
SubscriptionManager manager = SubscriptionManager.from(appContext);
SubscriptionInfo = manager.getActiveSubscriptionInfo(sub);
要么
SubscriptionInfo = manager.getActiveSubscriptionInfoForSimSlotIndex(slot);
并且在SubscriptionInfo中有一些有用的信息,例如电话号码,如上所述,其中一个不能保证可用.
我也忘了提到,从api级别22添加了双重SIM支持库存android.