如何以编程方式检查 android 中哪个 sim 被设置为默认 sim
How to check which sim is set as default sim in android programatically
我正在尝试检查我的移动设备是否是双 sim 卡,sim1 是否准备就绪,sim2 是否准备就绪,我使用 java 反射完成了这个,现在我想知道是否sim1 isRoaming 如果 sim2 isRoaming,如果它的双 sim 卡被设置为默认值。是否可以借助 java 反射。
你可以这样做:
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
class 它提供了开发人员所需的与 sim 卡和相关服务。
Documentation for SubscriptionManager
但是,在 API 24 中添加了对检索通话、短信和移动数据默认值的支持。
如果您将最低 SDK 版本设置为 24,则可以使用 getDefaultSmsSubscriptionId()
方法获取用户设置的默认短信
SubscriptionManager manager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int defaultSmsId = manager.getDefaultSmsSubscriptionId();
SubscriptionInfo info = manager.getActiveSubscriptionInfo(defaultSmsId);
注意:上述调用需要READ_PHONE_STATE
许可。确保将其添加到清单文件中
一个很晚的答案,但我开始开发一个具有上述要求的应用程序
以下是完成它的最新方法。
/**
* @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中,我们可以得到必要的字段
我正在尝试检查我的移动设备是否是双 sim 卡,sim1 是否准备就绪,sim2 是否准备就绪,我使用 java 反射完成了这个,现在我想知道是否sim1 isRoaming 如果 sim2 isRoaming,如果它的双 sim 卡被设置为默认值。是否可以借助 java 反射。
你可以这样做:
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
class 它提供了开发人员所需的与 sim 卡和相关服务。
Documentation for SubscriptionManager
但是,在 API 24 中添加了对检索通话、短信和移动数据默认值的支持。
如果您将最低 SDK 版本设置为 24,则可以使用 getDefaultSmsSubscriptionId()
方法获取用户设置的默认短信
SubscriptionManager manager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
int defaultSmsId = manager.getDefaultSmsSubscriptionId();
SubscriptionInfo info = manager.getActiveSubscriptionInfo(defaultSmsId);
注意:上述调用需要READ_PHONE_STATE
许可。确保将其添加到清单文件中
一个很晚的答案,但我开始开发一个具有上述要求的应用程序
以下是完成它的最新方法。
/**
* @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中,我们可以得到必要的字段