Как запрограммировать приложение android для автоматического переключения SIM-карты по умолчанию для мобильных / сотовых данных. - PullRequest
0 голосов
/ 07 января 2020

Я занимаюсь разработкой приложения Android для использования в Android мобильных торговых точках (POS) терминалов (Android 7) ОС с двумя слотами для SIM-карт. Мне нужно приложение при запуске приложения, чтобы сначала проверить уровень сигнала на обеих SIM-картах и ​​автоматически выбрать работу с SIM-картой с наилучшим уровнем сигнала. Затем периодически (каждые 15/30/60 минут в соответствии с выбранными настройками) снова проверяйте уровень сигнала для обеих SIM-карт и автоматически переключайте стандартную SIM-карту для данных на SIM-карту с наилучшим уровнем сигнала. Пока я могу заставить приложение измерять уровень сигнала на обеих SIM-картах и ​​отображать их пользователю, чтобы выбрать SIM-карту для работы. Это достигается с помощью Cellinfo в функции telephonyManager и следующего кода, который я нашел здесь :

private static String getSignalStrength (Context context) throws SecurityException {
TelephonyManager telephonyManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

String strength = "";
if (ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
    // TODO: Consider calling
    //    ActivityCompat#requestPermissions
    // here to request the missing permissions, and then overriding
    //   public void onRequestPermissionsResult(int requestCode, String[] permissions,
    //                                          int[] grantResults)
    // to handle the case where the user grants the permission. See the documentation
    // for ActivityCompat#requestPermissions for more details.
    return "";
}

List<CellInfo> cellInfos = telephonyManager.getAllCellInfo();   //This will give info of all sims present inside your mobile
if(cellInfos != null) {
    for (int i = 0 ; i < cellInfos.size() ; i++) {
        if (cellInfos.get(i).isRegistered()) {
            if (cellInfos.get(i) instanceof CellInfoWcdma) {

                CellInfoWcdma cellInfoWcdma = (CellInfoWcdma) cellInfos.get(i);
                CellSignalStrengthWcdma cellSignalStrengthWcdma = cellInfoWcdma.getCellSignalStrength();
                strength += String.valueOf(cellSignalStrengthWcdma.getDbm());
            } else if (cellInfos.get(i) instanceof CellInfoGsm) {
                CellInfoGsm cellInfogsm = (CellInfoGsm) cellInfos.get(i);
                CellSignalStrengthGsm cellSignalStrengthGsm = cellInfogsm.getCellSignalStrength();
                strength += String.valueOf(cellSignalStrengthGsm.getDbm());
            } else if (cellInfos.get(i) instanceof CellInfoLte) {
                CellInfoLte cellInfoLte = (CellInfoLte) cellInfos.get(i);
                CellSignalStrengthLte cellSignalStrengthLte = cellInfoLte.getCellSignalStrength();
                strength += String.valueOf(cellSignalStrengthLte.getDbm());
            } else if (cellInfos.get(i) instanceof CellInfoCdma) {
                CellInfoCdma cellInfoCdma = (CellInfoCdma) cellInfos.get(i);
                CellSignalStrengthCdma cellSignalStrengthCdma = cellInfoCdma.getCellSignalStrength();
                strength += String.valueOf(cellSignalStrengthCdma.getDbm());
            }
            strength+=";";
        }
    }
}
return strength;

}

Теперь я застрял в том, как переключить SIM-карту по умолчанию для данных автоматически и без необходимости вмешательства пользователя.

...