Android 7.1.1でcaptive portal検出によりネットワークが利用できない状態
7077 ワード
Android 7.1.1に接続するとwifiに接続できますが、ネットワーク状態表示ネットワークは利用できません.これは、wifiに接続すると自動的にcaptive portalサーバアドレスが検出されるため、ほとんどの国内ユーザーがgoogleサイトにアクセスできないため、インターネットができてもネットワーク状態表示は利用できません
Android frameworkソースコードでサーバアドレスが
コマンドでデータベースのデフォルトアドレスAOSP issue tracker v 2 exを変更できるgenerate_204のWebサイトは次のとおりです.
直接コマンドでネットワークを閉じてインターネットを検出することもできます
ソースコードframeworks/base/services/core/java/com/android/server/connectivity Services.JAvaの中
私たちは変わったGlobal.CAPTIVE_PORTAL_MODE_PROMPTのデフォルト値でOK
Android frameworkソースコードでサーバアドレスが
// Default configuration values for captive portal detection probes.
// TODO: append a random length parameter to the default HTTPS url.
// TODO: randomize browser version ids in the default User-Agent String.
private static final String DEFAULT_HTTPS_URL = "https://www.google.com/generate_204";
private static final String DEFAULT_HTTP_URL =
"http://connectivitycheck.gstatic.com/generate_204";
private static String getCaptivePortalServerHttpsUrl(Context context) {
return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTPS_URL, DEFAULT_HTTPS_URL);
}
public static String getCaptivePortalServerHttpUrl(Context context) {
return getSetting(context, Settings.Global.CAPTIVE_PORTAL_HTTP_URL, DEFAULT_HTTP_URL);
}
コマンドでデータベースのデフォルトアドレスAOSP issue tracker v 2 exを変更できるgenerate_204のWebサイトは次のとおりです.
adb shell "settings put global captive_portal_http_url http://captive.v2ex.co/generate_204"
adb shell "settings put global captive_portal_https_url https://captive.v2ex.co/generate_204"
直接コマンドでネットワークを閉じてインターネットを検出することもできます
adb shell settings put global captive_portal_mode 0
ソースコードframeworks/base/services/core/java/com/android/server/connectivity Services.JAvaの中
case NetworkMonitor.EVENT_PROVISIONING_NOTIFICATION: {
final int netId = msg.arg2;
final boolean visible = (msg.arg1 != 0);
final NetworkAgentInfo nai;
synchronized (mNetworkForNetId) {
nai = mNetworkForNetId.get(netId);
}
// If captive portal status has changed, update capabilities or disconnect.
if (nai != null && (visible != nai.lastCaptivePortalDetected)) {
final int oldScore = nai.getCurrentScore();
nai.lastCaptivePortalDetected = visible;
nai.everCaptivePortalDetected |= visible;
if (nai.lastCaptivePortalDetected &&
Settings.Global.CAPTIVE_PORTAL_MODE_AVOID == getCaptivePortalMode()) {
if (DBG) log("Avoiding captive portal network: " + nai.name());
nai.asyncChannel.sendMessage(
NetworkAgent.CMD_PREVENT_AUTOMATIC_RECONNECT);
teardownUnneededNetwork(nai);
break;
}
updateCapabilities(oldScore, nai, nai.networkCapabilities);
}
if (!visible) {
mNotifier.clearNotification(netId);
} else {
if (nai == null) {
loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor");
break;
}
if (!nai.networkMisc.provisioningNotificationDisabled) {
mNotifier.showNotification(netId, NotificationType.SIGN_IN, nai, null,
(PendingIntent) msg.obj, nai.networkMisc.explicitlySelected);
}
}
private int getCaptivePortalMode() {
return Settings.Global.getInt(mContext.getContentResolver(),
Settings.Global.CAPTIVE_PORTAL_MODE,
Settings.Global.CAPTIVE_PORTAL_MODE_PROMPT);
}
私たちは変わったGlobal.CAPTIVE_PORTAL_MODE_PROMPTのデフォルト値でOK