2017-05-16 1 views
1

J'ai suivi quelques tutoriels en ligne en essayant de créer un scanner wifi sur un studio android mais j'ai des problèmes avec la méthode getConfiguredNetworks() de WifiManager. Il retourne constamment null au lieu de la liste attendue.Android Wifimanager.getConfiguredNetworks() renvoie la valeur null

J'ai fait quelques recherches en ligne et il semble que mon code continue à lancer une exception RemoteException. Même après avoir lu la documentation sur: http://docs.oracle.com/javase/7/docs/api/java/rmi/RemoteException.html, je ne comprends toujours pas ce qu'est un RemoteExcecption ou comment le résoudre.

Voici un extrait de mon code:

wifi=(WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE); 
    wifi.setWifiEnabled(true); 
    Log.d("WifiInfo", "info is: " + info); 

    // list available network 

    List<WifiConfiguration> configurations = wifi.getConfiguredNetworks(); //configurations is null 
    Log.d("List<WifiConfig>", "configurations is: " + configurations); //error thrown here 
    // Is WiFi on? 
    if (wifi.isWifiEnabled()) { 
     // Check for existing APs. 
     for(WifiConfiguration config : configurations) { 
      Log.d("CONFIG", config.toString()); 
      myItems.add(config.toString()); 
     } 
    } 

Quelqu'un peut-il me aider, s'il vous plaît?

Répondre

0

utiliser ce code ..

public class MainActivity extends AppCompatActivity implements View.OnClickListener { 
    WifiManager wifi; 
    ListView lv; 
    TextView textStatus; 
    Button buttonScan; 
    int size = 0; 
    List<ScanResult> results; 

    String ITEM_KEY = "key"; 
    ArrayList<HashMap<String, String>> arraylist = new ArrayList<HashMap<String, String>>(); 
    SimpleAdapter adapter; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 


     // textStatus = (TextView) findViewById(R.id.test1); 
     buttonScan = (Button) findViewById(R.id.btn); 
     buttonScan.setOnClickListener(MainActivity.this); 
     lv = (ListView) findViewById(R.id.listview_item); 

     wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE); 
     if (wifi.isWifiEnabled() == false) { 
      Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show(); 
      wifi.setWifiEnabled(true); 
     } 
     this.adapter = new SimpleAdapter(MainActivity.this, arraylist, R.layout.raw, new String[]{ITEM_KEY}, new int[]{R.id.row}); 
     lv.setAdapter(this.adapter); 

     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context c, Intent intent) { 


       results = wifi.getScanResults(); 
       size = results.size(); 
      } 
     }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)); 


     lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Toast.makeText(MainActivity.this, arraylist.get(position).toString(), Toast.LENGTH_SHORT).show(); 

       connectToAP(arraylist.get(position).get("key"), ""); 

      } 
     }); 
    } 

    public void connectToAP(String ssid, final String passkey) { 


     final WifiConfiguration wifiConfiguration = new WifiConfiguration(); 

     final String networkSSID = ssid; 
     final String[] networkPass = {passkey}; 
     final String[] password = {""}; 
     for (ScanResult result : results) { 
      if (result.SSID.equals(networkSSID)) { 

       String securityMode = getScanResultSecurity(result); 

       if (securityMode.equals("PSK")) { 
        final AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this); 
        dialog.setTitle("Password"); 
        dialog.setMessage("Enter Passsword"); 
        final EditText editText = new EditText(MainActivity.this); 
        LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT); 
        editText.setLayoutParams(lp); 
        dialog.setView(editText); 


        dialog.setPositiveButton("YES", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 

          password[0] = editText.getText().toString(); 
          wifiConfiguration.SSID = "\"" + networkSSID + "\""; 
          wifiConfiguration.preSharedKey = "\"" + editText.getText().toString() + "\""; 
          wifiConfiguration.hiddenSSID = true; 
          wifiConfiguration.status = WifiConfiguration.Status.ENABLED; 
          wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP); 
          wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP); 
          wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); 
          wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 
          wifiConfiguration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 
          wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN); 
          wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA); 

          int res = wifi.addNetwork(wifiConfiguration); 

          wifi.enableNetwork(res, true); 

          boolean changeHappen = wifi.saveConfiguration(); 

          if (res != -1 && changeHappen) { 

           // .connectedSsidName = networkSSID; 

          } else { 
           // Log.d(TAG, "*** Change NOT happen"); 
          } 

          wifi.setWifiEnabled(true); 

         } 
        }); 

        dialog.setNegativeButton("NO", new DialogInterface.OnClickListener() { 
         @Override 
         public void onClick(DialogInterface dialog, int which) { 
          dialog.cancel(); 
         } 
        }); 
        dialog.show(); 

       } 

       if (securityMode.equalsIgnoreCase("OPEN")) { 

        wifiConfiguration.SSID = "\"" + networkSSID + "\""; 
        wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
        int res = wifi.addNetwork(wifiConfiguration); 
        boolean b = wifi.enableNetwork(res, true); 
        wifi.setWifiEnabled(true); 

       } else if (securityMode.equalsIgnoreCase("WEP")) { 

        wifiConfiguration.SSID = "\"" + networkSSID + "\""; 
        wifiConfiguration.wepKeys[0] = "\"" + password[0] + "\""; 
        wifiConfiguration.wepTxKeyIndex = 0; 
        wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE); 
        wifiConfiguration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
        int res = wifi.addNetwork(wifiConfiguration); 

        boolean b = wifi.enableNetwork(res, true); 

        wifi.setWifiEnabled(true); 
       } 


      } 
     } 
    } 

    public String getScanResultSecurity(ScanResult scanResult) { 

     final String cap = scanResult.capabilities; 
     final String[] securityModes = {"WEP", "PSK", "EAP"}; 

     for (int i = securityModes.length - 1; i >= 0; i--) { 
      if (cap.contains(securityModes[i])) { 
       return securityModes[i]; 
      } 
     } 

     return "OPEN"; 


    } 

    public void onClick(View view) { 
     arraylist.clear(); 
     wifi.startScan(); 

     Toast.makeText(this, "Scanning...." + size, Toast.LENGTH_SHORT).show(); 
     try { 
      size = size - 1; 
      while (size >= 0) { 
       HashMap<String, String> item = new HashMap<String, String>(); 
       item.put(ITEM_KEY, results.get(size).SSID); 
       item.put("capablity", results.get(size).capabilities); 
       adapter.notifyDataSetChanged(); 

       arraylist.add(item); 
       size--; 
      } 
     } catch (Exception e) { 
     } 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/activity_main" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.admin.wifi.MainActivity"> 



    <ListView 
     android:id="@+id/listview_item" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 


    </ListView> 
    <Button 
     android:id="@+id/btn" 
     android:layout_alignParentBottom="true" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="scan" /> 


</RelativeLayout> 

raw.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 
    <TextView 
     android:layout_width="match_parent" 
     android:id="@+id/row" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

Maifest

+0

Merci! Ce code a fonctionné pour moi. Je ne comprends pas ce qui s'est mal passé. Avez-vous une explication pourquoi cela n'a peut-être pas fonctionné? –