栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

无需连接即可获取WiFi的SSID?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

无需连接即可获取WiFi的SSID?

如果您想获得所有可用的wifi:

   List<ScanResult> mScanResults = mWifiManager.getScanResults();

如果要连接wifi ssid:

   WifiManager wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);   WifiInfo wifiInfo = wifiManager.getConnectionInfo();   Log.d("wifiInfo", wifiInfo.toString());   Log.d("SSID",wifiInfo.getSSID());

如果您想添加新的wifi设置,我已在下面编写了演示应用程序:

public class MainActivity extends ActionBarActivity {    @Override    protected void onCreate(Bundle savedInstanceState) {    super.onCreate(savedInstanceState);    setContentView(R.layout.activity_main);    connectToAP("12345", "12345");    WifiConfiguration wifiConf = null;    WifiManager wifiManager = (WifiManager) getSystemService(MainActivity.WIFI_SERVICE);    WifiInfo connectionInfo = wifiManager.getConnectionInfo();    List<WifiConfiguration> configuredNetworks = wifiManager    .getConfiguredNetworks();    for (WifiConfiguration conf : configuredNetworks) {    if (conf.networkId == 13) {    wifiConf = conf;    try {    setIpAssignment("STATIC", wifiConf); // or "DHCP" for    // dynamic setting    setIpAddress(InetAddress.getByName("192.168.0.100"), 24,    wifiConf);    setGateway(InetAddress.getByName("4.4.4.4"), wifiConf);    setDNS(InetAddress.getByName("4.4.4.4"), wifiConf);    wifiManager.updateNetwork(wifiConf); // apply the setting    wifiManager.saveConfiguration(); // Save it    } catch (Exception e) {    e.printStackTrace();    }    break;    }    }    }    public static void setIpAssignment(String assign, WifiConfiguration wifiConf)    throws SecurityException, IllegalArgumentException,    NoSuchFieldException, IllegalAccessException {    setEnumField(wifiConf, assign, "ipAssignment");    }    public static void setEnumField(Object obj, String value, String name)    throws SecurityException, NoSuchFieldException,    IllegalArgumentException, IllegalAccessException {    Field f = obj.getClass().getField(name);    f.set(obj, Enum.valueOf((Class<Enum>) f.getType(), value));    }    public static void setIpAddress(InetAddress addr, int prefixLength,    WifiConfiguration wifiConf) throws SecurityException,    IllegalArgumentException, NoSuchFieldException,    IllegalAccessException, NoSuchMethodException,    ClassNotFoundException, InstantiationException,    InvocationTargetException {    Object linkProperties = getField(wifiConf, "linkProperties");    if (linkProperties == null)    return;    Class laClass = Class.forName("android.net.linkAddress");    Constructor laConstructor = laClass.getConstructor(new Class[] {    InetAddress.class, int.class });    Object linkAddress = laConstructor.newInstance(addr, prefixLength);    ArrayList mlinkAddresses = (ArrayList) getDeclaredField(linkProperties,    "mlinkAddresses");    mlinkAddresses.clear();    mlinkAddresses.add(linkAddress);    }    public static void setGateway(InetAddress gateway,    WifiConfiguration wifiConf) throws SecurityException,    IllegalArgumentException, NoSuchFieldException,    IllegalAccessException, ClassNotFoundException,    NoSuchMethodException, InstantiationException,    InvocationTargetException {    Object linkProperties = getField(wifiConf, "linkProperties");    if (linkProperties == null)    return;    Class routeInfoClass = Class.forName("android.net.RouteInfo");    Constructor routeInfoConstructor = routeInfoClass    .getConstructor(new Class[] { InetAddress.class });    Object routeInfo = routeInfoConstructor.newInstance(gateway);    ArrayList mRoutes = (ArrayList) getDeclaredField(linkProperties,    "mRoutes");    mRoutes.clear();    mRoutes.add(routeInfo);    }    public static void setDNS(InetAddress dns, WifiConfiguration wifiConf)    throws SecurityException, IllegalArgumentException,    NoSuchFieldException, IllegalAccessException {    Object linkProperties = getField(wifiConf, "linkProperties");    if (linkProperties == null)    return;    ArrayList<InetAddress> mDnses = (ArrayList<InetAddress>) getDeclaredField(    linkProperties, "mDnses");    mDnses.clear(); // or add a new dns address , here I just want to    // replace DNS1    mDnses.add(dns);    }    public static Object getField(Object obj, String name)    throws SecurityException, NoSuchFieldException,    IllegalArgumentException, IllegalAccessException {    Field f = obj.getClass().getField(name);    Object out = f.get(obj);    return out;    }    public static Object getDeclaredField(Object obj, String name)    throws SecurityException, NoSuchFieldException,    IllegalArgumentException, IllegalAccessException {    Field f = obj.getClass().getDeclaredField(name);    f.setAccessible(true);    Object out = f.get(obj);    return out;    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {    // Inflate the menu; this adds items to the action bar if it is present.    getMenuInflater().inflate(R.menu.main, menu);    return true;    }    @Override    public boolean onOptionsItemSelected(MenuItem item) {    // Handle action bar item clicks here. The action bar will    // automatically handle clicks on the Home/Up button, so long    // as you specify a parent activity in AndroidManifest.xml.    int id = item.getItemId();    if (id == R.id.action_settings) {    return true;    }    return super.onOptionsItemSelected(item);    }    String TAG = "wifi";    WifiManager wifiManager;    public void connectToAP(String ssid, String passkey) {    Log.i(TAG, "* connectToAP");    wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);    WifiConfiguration wifiConfiguration = new WifiConfiguration();    String networkSSID = ssid;    String networkPass = passkey;    Log.d(TAG, "# password " + networkPass);    // for (ScanResult result : scanResultList) {    // if (result.SSID.equals(networkSSID)) {    if (true) {    // String securityMode = getScanResultSecurity(result);    String securityMode = "WEP";    if (securityMode.equalsIgnoreCase("OPEN")) {    wifiConfiguration.SSID = """ + networkSSID + """;    wifiConfiguration.allowedKeyManagement    .set(WifiConfiguration.KeyMgmt.NONE);    int res = wifiManager.addNetwork(wifiConfiguration);    Log.d(TAG, "# add Network returned " + res);    boolean b = wifiManager.enableNetwork(res, true);    Log.d(TAG, "# enableNetwork returned " + b);    wifiManager.setWifiEnabled(true);    } else if (securityMode.equalsIgnoreCase("WEP")) {    wifiConfiguration.SSID = """ + networkSSID + """;    wifiConfiguration.wepKeys[0] = """ + networkPass + """;    wifiConfiguration.wepTxKeyIndex = 0;    wifiConfiguration.allowedKeyManagement    .set(WifiConfiguration.KeyMgmt.NONE);    wifiConfiguration.allowedGroupCiphers    .set(WifiConfiguration.GroupCipher.WEP40);    int res = wifiManager.addNetwork(wifiConfiguration);    Log.d(TAG, "### 1 ### add Network returned " + res);    boolean b = wifiManager.enableNetwork(res, true);    Log.d(TAG, "# enableNetwork returned " + b);    wifiManager.setWifiEnabled(true);    }    wifiConfiguration.SSID = """ + networkSSID + """;    wifiConfiguration.preSharedKey = """ + networkPass + """;    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 = wifiManager.addNetwork(wifiConfiguration);    Log.d(TAG, "### 2 ### add Network returned " + res);    wifiManager.enableNetwork(res, true);    boolean changeHappen = wifiManager.saveConfiguration();    if (res != -1 && changeHappen) {    Log.d(TAG, "### Change happen");    // AppStaticVar.connectedSsidName = networkSSID;    } else {    Log.d(TAG, "*** Change NOT happen");    }    wifiManager.setWifiEnabled(true);    }    // }    }    public String getScanResultSecurity(ScanResult scanResult) {    Log.i(TAG, "* getScanResultSecurity");    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";    }}


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/374247.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号