我正在尝试检查我的移动设备是否为双卡,如果sim1准备就绪,如果sim2准备就绪,我使用java反射完成了这个,现在我想知道sim1是否正在发光,如果是sim2正在发光,如果它的双SIM卡的SIM设置为默认值。是否可以借助java反射。
答案 0 :(得分:6)
您可以这样做:
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;
}
答案 1 :(得分:1)
从API 22(Lollipop MR1)开始,android正式添加了SubscriptionManager
类,它提供了开发人员所需的有关SIM卡和相关服务的所有信息。
Documentation for SubscriptionManager
然而,在API 24中添加了对检索默认呼叫,SMS和移动数据的支持。
如果您使用的最小SDK版本为24,则可以使用getDefaultSmsSubscriptionId()
方法获取用户设置的短信
SubscriptionManager manager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int defaultSmsId = manager.getDefaultSmsSubscriptionId();
SubscriptionInfo info = manager.getActiveSubscriptionInfo(defaultSmsId);
注意:上面提到的电话需要READ_PHONE_STATE
权限。确保将其添加到清单文件中