Настройте APN на Android 9 (уровень API 28)
Я пытаюсь использовать новый APN api
Код выглядит так
DevicePolicyManager dpm = (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
ComponentName deviceAdmin = new ComponentName(getApplicationContext(), DeviceAdmin.class);
ApnSetting apn = (new ApnSetting.Builder())
.setApnTypeBitmask(ApnSetting.TYPE_DEFAULT)
.setApnName("sonme.real.apn.url")
.setEntryName("Some Entry")
.setCarrierEnabled(true)
.build();
int re = dpm.addOverrideApn(deviceAdmin, apn);
dpm.setOverrideApnsEnabled(deviceAdmin, true);
Но кроме того факта, что меню APN становится недоступным (заблокировано для администратора - что нормально), APN не работает
пс
Я проверил с dpm.getOverrideApns(deviceAdmin);
и добавленный apn присутствует... И еще попробовал установить setProtocol
а также setRoamingProtocol
Есть идеи?
1 ответ
Наконец разобрался, чего не хватало
Похоже, что при добавлении apns с помощью API вы должны явно указать setProtocol
, setRoamingProtocol
и setOperatorNumeric
, это обязательно, и он состоит из Telephony.Carriers.MCC + Telephony.Carriers.MNC (в моем случае мне пришлось заполнить MNC начальным нулем)
ApnSetting apn = (new ApnSetting.Builder())
.setApnTypeBitmask(ApnSetting.TYPE_DEFAULT)
.setApnName("net.hotm")
.setEntryName("HOT")
.setCarrierEnabled(true) // enable it
.setOperatorNumeric("425" + "07") // this is a must its consists from Telephony.Carriers.MCC + Telephony.Carriers.MNC, In my case, I had to pad the MNC with a leading zero
.setProtocol(ApnSetting.PROTOCOL_IPV4V6) // this is a must
.setRoamingProtocol(ApnSetting.PROTOCOL_IPV4V6) // this is a must
.build();
int re = dpm.addOverrideApn(deviceAdmin, apn);
currApns = dpm.getOverrideApns(deviceAdmin);
dpm.setOverrideApnsEnabled(deviceAdmin, true);
пс
MCC и MNC можно получить из TelephonyManager, getSimOperator()
(getSimOperator().substring(3) and getSimOperator().substring(0, 3)
)