如何在android中以编程方式检查哪个sim设置为默认sim

我试图检查我的移动设备是否为双卡,如果sim1准备就绪,如果sim2准备就绪,我使用javareflection完成了这个,现在我想知道sim1是否正在发光,如果sim2是正在发光,如果它的双SIM卡,默认设置为sim。 是否有可能借助javareflection。

你可以这样做:

public int getDefaultSimmm(Context context) { Object tm = context.getSystemService(Context.TELEPHONY_SERVICE); Method method_getDefaultSim; int defaultSimm = -1; try { method_getDefaultSim = tm.getClass().getDeclaredMethod("getDefaultSim"); method_getDefaultSim.setAccessible(true); defaultSimm = (Integer) method_getDefaultSim.invoke(tm); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } Method method_getSmsDefaultSim; int smsDefaultSim = -1; try { method_getSmsDefaultSim = tm.getClass().getDeclaredMethod("getSmsDefaultSim"); smsDefaultSim = (Integer) method_getSmsDefaultSim.invoke(tm); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } return smsDefaultSim; } 

从API 22(Lollipop MR1)开始,android正式添加了SubscriptionManager类,它提供了开发人员与sim卡和相关服务相关的所有信息。

SubscriptionManager文档

但是,在API 24中添加了对检索默认呼叫,SMS和移动数据的支持。如果使用最小SDK版本为24,则可以使用getDefaultSmsSubscriptionId()方法获取用户的SMS默认设置

 SubscriptionManager manager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); int defaultSmsId = manager.getDefaultSmsSubscriptionId(); SubscriptionInfo info = manager.getActiveSubscriptionInfo(defaultSmsId); 

注意:上面提到的调用需要READ_PHONE_STATE权限。 确保将其添加到清单文件中