Java 如何通过编程检查android中哪个sim卡被设置为默认sim卡
我正在尝试检查我的移动设备是否为双sim卡,sim1是否已就绪,sim2是否已就绪,我已使用java反射完成此操作,现在我想了解sim1是否正在移动,sim2是否正在移动,以及其双sim卡中哪个sim卡设置为默认。在java反射的帮助下,这是可能的 您可以这样做:Java 如何通过编程检查android中哪个sim卡被设置为默认sim卡,java,android,reflection,Java,Android,Reflection,我正在尝试检查我的移动设备是否为双sim卡,sim1是否已就绪,sim2是否已就绪,我已使用java反射完成此操作,现在我想了解sim1是否正在移动,sim2是否正在移动,以及其双sim卡中哪个sim卡设置为默认。在java反射的帮助下,这是可能的 您可以这样做: public int getDefaultSimmm(Context context) { Object tm = context.getSystemService(Context.TELEPHONY_SERVICE);
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(棒棒糖MR1)开始,android正式添加了SubscriptionManager
类,该类提供开发者所需的与sim卡和相关服务相关的所有信息
然而,API 24中增加了对检索呼叫、SMS和移动数据的默认值的支持。
如果将SDK的最低版本设置为24,则可以使用GetDefaultSMSSSubscriptionId()
方法获取用户设置的SMS默认值
SubscriptionManager manager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int defaultSmsId = manager.getDefaultSmsSubscriptionId();
SubscriptionInfo info = manager.getActiveSubscriptionInfo(defaultSmsId);
注意:上述通话需要
READ\u PHONE\u STATE
权限。确保将其添加到清单文件中也许有人能告诉我如何使用getDefaultSim()方法。我正在尝试使用它,但它返回null.TelephonyManager﹕ getDefaultSim是sim1。这出现在我的LogCat文件中,我可以从LogCat文件中通过编程读取它吗。非常感谢。这很有帮助。并且对我有效。如果我为拨打电话选择了默认SIM卡/选择了第二张SIM卡,则始终获得0。