代码之家  ›  专栏  ›  技术社区  ›  Nick Cardoso

当Android Pie上的私有DNS更改时得到通知

  •  -1
  • Nick Cardoso  · 技术社区  · 6 年前

    我的服务当前使用VPN,因此需要我遵守专用DNS设置。

    当私有DNS更改时,如何得到通知?

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

    registerReceiver(connectivityReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Nick Cardoso    6 年前

    根据源代码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());
                 }
            }
        });
    }