在Android 9 (API level 28)上配置APNs

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无法工作

p.s

我使用dpm.getOverrideApns(deviceAdmin);进行检查,发现添加的APN已存在... 我也尝试设置setProtocolsetRoamingProtocol

有什么想法吗?

1个回答

3

最终找到了缺失的部分

当使用API添加apns时,必须明确指定setProtocolsetRoamingProtocolsetOperatorNumeric,这是必须的,它由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);

p.s

MCC和MNC可以从TelephonyManager的getSimOperator()方法中获取(使用getSimOperator().substring(3)和getSimOperator().substring(0, 3))。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接