权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission
android:name="android.permission.MODIFY_PHONE_STATE"
tools:ignore="ProtectedPermissions" />
反射调用:
//传入参数:1-SIM1, 2-SIM2
findViewById(R.id.btn_sim1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getDefaultDataSubId() != 1) {
setDefaultDataSubId(1);
Log.d(TAG, "wjz debug onClick: 切换到SIM1!!!");
} else {
Log.d(TAG, "wjz debug onClick: 当前使用SIM1,无需切换!!!");
}
}
});
findViewById(R.id.btn_sim2).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (getDefaultDataSubId() != 2) {
setDefaultDataSubId(2);
Log.d(TAG, "wjz debug onClick: 切换到SIM2!!!");
} else {
Log.d(TAG, "wjz debug onClick: 当前使用SIM2,无需切换!!!");
}
}
});
private void setDefaultDataSubId(int subId) {
SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
try {
Method method = subscriptionManager.getClass().getDeclaredMethod("setDefaultDataSubId", int.class);
method.invoke(subscriptionManager, subId);
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
Method method1 = telephonyManager.getClass().getDeclaredMethod("setDataEnabled", boolean.class);
method1.invoke(telephonyManager, true);
} catch (Exception e) {
Log.e(TAG, "wjz debug setDefaultDataSubId: error is " + e.getMessage());
}
}
private int getDefaultDataSubId() {
SubscriptionManager subscriptionManager = (SubscriptionManager) getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
try {
Method method = subscriptionManager.getClass().getDeclaredMethod("getDefaultDataSubscriptionId");
return (int) method.invoke(subscriptionManager);
} catch (Exception e) {
Log.e(TAG, "wjz debug getDefaultDataSubId: error is " + e.getMessage());
}
return 0;
}
测试结果:
2021-10-08 16:40:59.323 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM1!!!
2021-10-08 16:41:02.378 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 当前使用SIM1,无需切换!!!
2021-10-08 16:41:04.738 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM2!!!
2021-10-08 16:41:06.633 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 当前使用SIM2,无需切换!!!
2021-10-08 16:41:14.577 21466-21466/com.test.app D/MainActivity: wjz debug onClick: 切换到SIM1!!!
原始代码:
//SubscriptionManager.java
/**
* Returns the system's default data subscription id.
*
* On a voice only device or on error, will return INVALID_SUBSCRIPTION_ID.
*
* @return the default data subscription Id.
*/
public static int getDefaultDataSubscriptionId() {
return sDefaultDataSubIdCache.query(null);
}
/**
* Set the subscription which will be used by default for data, with the subscription which
* the supplied subscription ID corresponds to; or throw a RuntimeException if the supplied
* subscription ID is not usable (check with {@link #isUsableSubscriptionId(int)}).
*
* @param subscriptionId the supplied subscription ID
*
* @hide
*/
@SystemApi
@RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
public void setDefaultDataSubId(int subscriptionId) {
if (VDBG) logd("setDataSubscription sub id = " + subscriptionId);
try {
ISub iSub = TelephonyManager.getSubscriptionService();
if (iSub != null) {
iSub.setDefaultDataSubId(subscriptionId);
}
} catch (RemoteException ex) {
// ignore it
}
}
版权声明:本文为u010725171原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。