2017-05-02 3 views
0

J'essaie d'obtenir la liste WiFi actuellement disponible dans un Moto 360 Sport (Android 6.0.1). Mon code fonctionne mais je dois ouvrir manuellement le WiFi dans les paramètres afin que le BroadcastReceiver puisse être appelé.Android Wear WifiManager - Doit ouvrir manuellement WiFi dans les paramètres pour obtenir des résultats

récepteur My WiFi:

broadcastReceiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     if (intent.getAction().equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) { 
      List<ScanResult> scanResults = wifiManager.getScanResults(); 
      sendWifiResult(scanResults); 
      unregister(); 
     } 
    } 
}; 

J'ai demandé un tas d'autorisations de l'utilisateur:

private static String[] permissions = { 
     "android.permission.BODY_SENSORS", 
     "android.permission.RECORD_AUDIO", 
     "android.permission.INTERNET", 
     "android.permission.ACCESS_NETWORK_STATE", 
     "android.permission.CHANGE_WIFI_STATE", 
     "android.permission.ACCESS_WIFI_STATE", 
     "android.permission.LOCATION_HARDWARE", 
     "android.permission.ACCESS_FINE_LOCATION", 
     "android.permission.ACCESS_COARSE_LOCATION", 
     "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS", 
}; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    // some unrelated codes 

    if (!checkPermissions()) 
     this.requestPermissions(permissions, 1); 
    else 
     startService(new Intent(this, DataSourceService.class)); 
} 

private boolean checkPermissions() { 
    for (String permission : permissions) { 
     if (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED) 
      return false; 
    } 
    return true; 
} 

@Override 
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 
    super.onRequestPermissionsResult(requestCode, permissions, grantResults); 
    if (checkSelfPermission("android.permission.BODY_SENSORS") 
      != PackageManager.PERMISSION_GRANTED) 
     requestPermissions(permissions, 1); 
    else 
     startService(new Intent(this, DataSourceService.class)); 
} 

J'ai beaucoup cherché. Mais toutes les questions connexes que j'ai trouvées étaient soit tout ou rien - ils ont tout travaillé, ou, ils ne pouvaient pas obtenir l'émission ou ont eu des listes vides.

Dans mon cas, j'ai obtenu les résultats, mais seulement si j'ouvre le WiFi dans les paramètres système de mon propre chef.

C'est vraiment bizarre et je n'ai pas été capable de trouver une solution. Ai-je besoin de configurations spéciales dans Android Wears?

Toute aide serait appréciée. Merci.

+0

Essayez de configurer ['wifiManager.setWifiEnabled (status)'] (https://developer.android.com/reference/android/net/wifi/WifiManager.html#setWifiEnabled (booléen)) pour activer/désactiver le wifi. Cela activera/désactivera par programme comme indiqué dans ce SO [post] (http://stackoverflow.com/a/3931094/5995040) lié. J'espère que cela t'aides. –

+0

@ Mr.Rebot Malheureusement, j'ai déjà fait 'setWifiEnabled' et' startScan' :( –

Répondre

1

Résolu. Ainsi, plutôt que d'utiliser

if (!wifiManager.isWifiEnabled()) { 
    wifiManager.setWifiEnabled(true); 
} 

... tout simplement le feu

wifiManager.setWifiEnabled(true); 

directement. Pour quelque raison, le isWifiEnabled() renvoie toujours true.