diff --git a/app/src/main/java/com/xypower/mpapp/MainActivity.java b/app/src/main/java/com/xypower/mpapp/MainActivity.java index 2f5dc42b..a43fd53c 100644 --- a/app/src/main/java/com/xypower/mpapp/MainActivity.java +++ b/app/src/main/java/com/xypower/mpapp/MainActivity.java @@ -110,6 +110,13 @@ public class MainActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) { + int activeSubId = SubscriptionManager.getActiveDataSubscriptionId(); + if (activeSubId == -1) { + MicroPhotoContext.selectSimCard(getApplicationContext(), 1); + } + } + binding = ActivityMainBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); // getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN); diff --git a/common/src/main/java/com/xypower/common/MicroPhotoContext.java b/common/src/main/java/com/xypower/common/MicroPhotoContext.java index 23923425..01767292 100644 --- a/common/src/main/java/com/xypower/common/MicroPhotoContext.java +++ b/common/src/main/java/com/xypower/common/MicroPhotoContext.java @@ -4,9 +4,13 @@ import android.app.ActivityManager; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; +import android.os.Build; import android.os.Environment; import android.os.storage.StorageManager; +import android.telephony.SubscriptionManager; +import android.telephony.TelephonyManager; import android.text.TextUtils; +import android.util.Log; import com.dev.devapi.api.SysApi; @@ -492,5 +496,59 @@ public class MicroPhotoContext { return versionCode; } + public static boolean selectSimCard(final Context context, int num) { + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + + SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); + int activeSubId = SubscriptionManager.getActiveDataSubscriptionId(); + int activeSlotIdx = SubscriptionManager.getSlotIndex(activeSubId); + if (activeSlotIdx == (num - 1)) { + // logger.info("Active SimCard is already " + Integer.toString(num)); + } else { + int subIds[] = subscriptionManager.getSubscriptionIds(num - 1); + if (subIds != null && subIds.length > 0) { + setDefaultDataSubId(context, subIds[0]); + // logger.info("Switched To SimCard: " + Integer.toString(num)); + } + } + } else { + SysApi.selectSimCard4Data(context, num); + } + + return true; + } + + private static void setDefaultDataSubId(final Context context, int subId) { + SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); + try { + + Method method = subscriptionManager.getClass().getDeclaredMethod("setDefaultDataSubId", int.class); + try { + method.invoke(subscriptionManager, subId); + } catch (Exception ex) { + ex.printStackTrace(); + } + TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + telephonyManager.setDataEnabled(true); + } + Method method1 = telephonyManager.getClass().getDeclaredMethod("setDataEnabled", boolean.class); + method1.invoke(telephonyManager, true); + } catch (Exception e) { + e.printStackTrace(); + } + } + + private static int getDefaultDataSubId(final Context context) { + SubscriptionManager subscriptionManager = (SubscriptionManager) context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); + try { + Method method = subscriptionManager.getClass().getDeclaredMethod("getDefaultDataSubscriptionId"); + return (int) method.invoke(subscriptionManager); + } catch (Exception e) { + e.printStackTrace(); + } + return 0; + } }