我正在尝试检查我的移动设备是否为双sim,如果sim1已就绪,sim2是否已就绪,我将使用java反射完成此操作,现在我想知道是否使用sim1 isRoaming和sim2 isRoaming,以及是否将其dual设置为默认值。有没有可能在java反射的帮助下。
发布于 2015-08-20 10:16:12
你可以这样做:
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;
}发布于 2018-06-13 04:11:22
从API 22 ( MR1)开始,android正式增加了SubscriptionManager类,它提供了开发者所需的与sim卡和相关服务相关的所有信息。
然而,API 24中添加了对调用、SMS和Mobile数据的默认检索支持。如果您使用最小SDK版本为24,则可以使用getDefaultSmsSubscriptionId()方法使用户设置SMS默认设置。
SubscriptionManager manager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int defaultSmsId = manager.getDefaultSmsSubscriptionId();
SubscriptionInfo info = manager.getActiveSubscriptionInfo(defaultSmsId);注意:上面提到的调用需要READ_PHONE_STATE权限。请确保将其添加到清单文件中。
发布于 2021-09-17 09:57:22
一个很晚的答案,但我开发了一个具有上述要求的应用程序。
下面是完成这一任务的最新方法。
/**
* @return - True - if any sim selected as default sim , False - No default sim is selected or
* permission for reading the sim status is not enabled
*/
boolean isDefaultSimSetForCall() {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
Log.d(Utils.getTag(), "Read Phone state permission Disabled");
genericCallbacks.onPermissionAccessError(Constants.PermissionErrorCodes.READ_PHONE_STATE_ACCESS);
return false;
} else {
PhoneAccountHandle defaultPhoneAccount = telecomManager.getDefaultOutgoingPhoneAccount(Uri.fromParts("tel", "text", null).getScheme());
if (defaultPhoneAccount != null) {
Log.d(Utils.getTag(), "DefaultOutgoingPhoneAccount: " + defaultPhoneAccount.getId());
return true;
}
}
return false;
}从接收到的PhoneAccountHandle中,我们可以得到必要的字段
https://stackoverflow.com/questions/32088950
复制相似问题