3

我正在尝试使用新的 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 无法正常工作

ps

我检查dpm.getOverrideApns(deviceAdmin);并添加了 apn 存在...我还尝试设置setProtocolandsetRoamingProtocol

有任何想法吗?

4

1 回答 1

1

终于弄清楚缺少什么

看来,当使用 API 添加 apns 时,您必须明确指定和 ,它是必须的setProtocol,并且它由 Telephony.Carriers.MCC + Telephony.Carriers.MNC 组成(在我的情况下,我必须用前导填充 MNC零)setRoamingProtocolsetOperatorNumeric

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);

ps

MCC 和 MNC 可以从TelephonyManager, getSimOperator()( getSimOperator().substring(3) and getSimOperator().substring(0, 3))中获取

于 2019-12-30T11:02:34.827 回答