在Android Pie上更改私有DNS时收到通知

时间:2018-08-24 13:15:41

标签: android

在Android P中,我们可以在系统/设备设置中设置私有DNS。

“我的服务”当前使用VPN,因此我必须遵守“私人DNS”设置。

私有DNS更改时如何获得通知?

在建立连接(使用我自己的DNS)之前,我已经在检查设置,但是一旦我的VPN启动并运行,我想对用户更改其私有DNS设置做出反应,但是我找不到记录任何地方。

更改后不会通知我现有的连接操作接收器

registerReceiver(connectivityReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));

1 个答案:

答案 0 :(得分:0)

遵循源代码JavaDoc中的注释,我设法找到了可行的解决方案

ConnectivityManager cMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
if (cMgr != null) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
        cMgr.registerNetworkCallback(new NetworkRequest.Builder().build(), new ConnectivityManager.NetworkCallback() {
            @Override
            public void onLinkPropertiesChanged(Network network, LinkProperties linkProperties) {
                super.onLinkPropertiesChanged(network, linkProperties);
                L.d(TAG, "onLinkPropertiesChanged(Network = " + network + ", LinkProperties = " + linkProperties + ")");
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
                    L.i(TAG, "LinkProperties.isPrivateDnsActive = " + linkProperties.isPrivateDnsActive() + ", server =" + linkProperties.getPrivateDnsServerName());
             }
        }
    });
}