首页 > 解决方案 > 如何以编程方式在 Android 中设置 DNS1 和 DNS2 以及如何检查 DNS 是否设置?

问题描述

我尝试了一些 DNS 代码

android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_USE_STATIC_IP, "1");
    android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_DNS1, "8.8.4.4");
    android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_DNS2, "8.8.8.8");
    android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_GATEWAY, "192.168.0.1");
    android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_NETMASK, "255.255.255.0");
    android.provider.Settings.System.putString(getContentResolver(), android.provider.Settings.System.WIFI_STATIC_IP, "192.168.1.51");

但是这段代码不起作用。

如果此代码有效,那么我检查 DNS 是否已设置。

任何人都请帮助我如何处理DNS。

谢谢

标签: androidandroid-studiodnswifivpn

解决方案


您需要在“AndroidManifest.xml”中请求“WRITE_SETTINGS”权限:

<uses-permission android:name="android.permission.WRITE_SETTINGS"/>

检查用户权限,如果它授予您可以更改设置:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (Settings.System.canWrite(this)) {
            android.provider.Settings.System.putString(getContentResolver(), Settings.System.WIFI_STATIC_DNS1, "8.8.8.8");
        }
        else {
            Intent intent = new Intent(android.provider.Settings.ACTION_MANAGE_WRITE_SETTINGS);
            intent.setData(Uri.parse("package:" + this.getPackageName()));
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            startActivity(intent);
        }
    }

您可以阅读您设置的内容,如下所示:

String dns1 = Settings.System.getString(getContentResolver(),  Settings.System.WIFI_STATIC_DNS1);

推荐阅读