1

Wi-Fiネットワークへの接続に失敗した場合、アラートダイアログを使用して再接続を試みるメソッドを実装しています。これまでのコードは次のとおりです。

public boolean autoConnect() {
      String networkSSID = "xxxxx";
      boolean connected = false;
      WifiConfiguration conf = new WifiConfiguration();

      conf.SSID = "\"" + networkSSID + "\"";
      conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
      WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
      wifiManager.addNetwork(conf);
      wifiManager.startScan();
      List<ScanResult> list = wifiManager.getScanResults();
      AlertDialog alertDialog = new AlertDialog.Builder(CarNannyv3Activity.this).create();
      alertDialog.setTitle("xxxxxxxx Not Available");  
      alertDialog.setMessage("Please make sure xxxxxx is turned on ");  
      alertDialog.setButton("Reconnect", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
                autoConnect();
                dialog.dismiss();


            } });
      for( ScanResult i : list ) {
          if(i.SSID.equals("\"" + networkSSID + "\"")) {

               //wifiManager.enableNetwork(i.networkId, true);
               wifiManager.reconnect();               
               return connected = true;


          }else{

                alertDialog.show();
          }
       } 
      return connected;
  }

再接続ダイアログが無限ループになるか、まったく表示されないかの2つのうちの1つが表示されます。私が間違っていることに光を当ててください。

4

1 に答える 1

0

これを使用してみてください、私の場合は機能しています::

        WifiManager notif_manager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        List<ScanResult> scan_list = notif_manager.getScanResults();
        for (ScanResult scan_ap : scan_list) 
        {
            if (scan_ap.SSID.equals("\"" + networkSSID + "\"")) 
            {

            /* Create a WifiConfig */
                WifiConfiguration eliteAp = new WifiConfiguration();

                /* AP Name */
                eliteAp.SSID = "\"" + ssidString + "\"";

                /* Priority */
                eliteAp.priority = 40;

                /* Enable Hidden SSID */
                eliteAp.hiddenSSID = false;
                .
                .
                .
                .
                .
                .       
                eliteAp.status = WifiConfiguration.Status.ENABLED;
                int res = wifi_manager.addNetwork(eliteAp);
                boolean d = wifi_manager.enableNetwork(res, true);
                break;

            }
        }
于 2012-12-20T07:32:45.930 に答える