web-dev-qa-db-fra.com

android 6.0.1 force la connexion wifi sans accès internet

cela pose de nombreuses questions similaires (google pour: "aucun accès Internet détecté. ne se reconnectera pas automatiquement." ou: Android forcer la connexion wifi par programmation).

je pensais avoir une réponse ici , mais cela a cessé de fonctionner après l'installation des mises à jour 6.0.1 (j'ai 1 correctif de sécurité).

semble que c'est un changement de comportement .

j'ai certains Nexus 7 2013 avec 6.0.1 qui exécutent une application de type kiosque et veulent se connecter par programme à un réseau sans fil spécifique qui n'a pas de connexion Internet. chaque tablette possède une adresse IP statique unique de la forme: 192.168.0.xx. j'utilise les constructeurs de socket normaux Java et vérifie si l'interface est en place en utilisant: NetworkInterface.getNetworkInterfaces ().

une connexion manuelle a été effectuée. parfois, une boîte de dialogue vous demande si vous souhaitez toujours vous connecter. je vérifie toujours oui.

mais le wifi dit: "aucun accès à Internet détecté. ne se reconnectera pas automatiquement" après que le routeur a coupé l'alimentation.

faire une déconnexion, activer, reconnecter ne fonctionne pas. au mieux, il obtient: ip6-localhost/:: 1.

quelqu'un a-t-il eu de la chance en utilisant un objet de demande, ou bindProcessToNetwork?

modifier: lié .

edit: le problème semble être avec: CAPTIVE_PORTAL_DETECTION_ENABLED - cette chaîne semble être définie dans la source:

public static final String
        CAPTIVE_PORTAL_DETECTION_ENABLED = "captive_portal_detection_enabled";
    ...
    MOVED_TO_GLOBAL.add(Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED);

mais lance "Android.provider.Settings $ SettingNotFoundException: captive_portal_detection_enabled lorsqu'il est utilisé explicitement et n'est pas visible pour Android studio.

également, faire une liste de paramètres globale ne contient pas la constante.

modifier en faisant un adb Les paramètres du shell mettent global captive_portal_detection_enabled 0 semble fonctionner, mais cela ne peut pas être fait sur le terrain lorsque le routeur met hors tension. cette valeur semble persister lorsque la tablette redémarre. et maintenant cette valeur apparaît dans une liste de paramètres globale. également, en utilisant la chaîne brute: Settings.Global.getInt (getContentResolver (), "captive_portal_detection_enabled"); renvoie maintenant 0.

edit: on dirait que le réglage nécessite: Android.permission.WRITE_SECURE_SETTINGS, mais bien sûr cela échoue lorsqu'il est mis dans le manifeste car nous ne sommes pas une application système.

edit: essayer d'exécuter la commande Shell renvoie: Java.lang.SecurityException, il semble donc que vous deviez émettre la commande depuis adb :(

merci

13
Ray Tayek

Pourriez-vous essayer de définir le paramètre global captive_portal_detection_enabled sur 0 (faux).

Ce qui se passe réellement, c'est que par défaut, chaque fois que vous vous connectez à un wifi, le FW testera contre un serveur (généralement google) pour voir s'il s'agit d'un wifi captif (nécessite une connexion). Donc, si votre wifi n'est pas connecté à Google, cette vérification échouera. Après cela, l'appareil sait que le wifi n'a pas de connexion Internet et ne s'y connectera tout simplement pas.

Si vous définissez ce paramètre sur 0, vous éviterez cette vérification.

Par programmation Settings.Global.putInt(getContentResolver(), Settings.Global.CAPTIVE_PORTAL_DETECTION_ENABLED, 0);

Vous pouvez le faire via adb à des fins de test:

adb Shell settings put global captive_portal_detection_enabled 0

Et récupérez sa valeur comme ceci:

adb Shell settings list global | grep "captive"

À mon humble avis, ce n'est pas très agréable à faire, car vous modifiez un paramètre pour l'utilisateur et de nombreux FW ne fournissent même pas de paramètre avancé pour activer/désactiver cela par l'utilisateur lui-même. (Google ne le fait pas). Mais peut-être que cela convient à vos besoins.

J'espère que ça aide!

11
Olaia

Une solution non root qui est une sorte de hack tech. : P

  1. Redémarrez le téléphone, connectez-vous au Wifi non Internet;
  2. Allez dans Paramètres et créez un nouvel utilisateur;
  3. Continuez, continuez et continuez jusqu'à voir "Vérification de la connexion";
  4. Dès que vous voyez "vérifier la connexion", éteignez votre téléphone;
  5. Rallumez votre téléphone, vous serez en utilisateur "Propriétaire", gardez-le;
  6. Basculez vers le Wifi et le point d'exclamation devrait disparaître rapidement :)
  7. Supprimez ce nouvel utilisateur ou laissez-le simplement là;

Je ne sais pas pourquoi, mais ça marche ...

0
MewX