当前位置: 首页 > 面试题库 >

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

邓禄
2023-03-14
问题内容

我想SSID在应用程序中连接到wifi网络。

码:

WifiConfiguration conf = new WifiConfiguration();

conf.SSID = "\"" + networkSSID + "\"";

但是问题是我不知道network SSID。如何获取WiFi网络的SSID without connecting


问题答案:

如果您想获得所有可用的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";
    }
}


 类似资料:
  • 问题内容: 我想有一个不连接数据库就表现为mysql_real_escape_string的功能,因为有时我需要在没有数据库连接的情况下进行干式测试。mysql_escape_string已被弃用,因此是不可取的。我的一些发现: http://www.gamedev.net/community/forums/topic.asp?topic_id=448909 http://w3schools.in

  • 问题内容: 我想检查一个版本已更改/获取具有Dropbox上共享链接的文本文件的元数据。我不会使用dropbox api,因为它会使用户使用自己的帐户。我希望他们链接到我的帐户,但是我不能手动执行此操作,因为以后可能会更改密码。 所以:没有身份验证令牌,只需从Dropbox的共享链接获取元数据,以便我可以检查版本更改以及版本是否已更改,请下载新文件的内容。 也:我也乐意接受其他建议以使这项工作也可

  • 但我没有找到关于如何实现这一点的信息。有人能帮我吗。以下是链接http://forum.xda-developers.com/showthread.php?t=2177133

  • 设置wifi账号和密码,连接特定的wifi网络。 请求方式: "|2|1|wifi_ssid,wifi_pwd|\r" 参数: wifi_ssid wifi账号的SSID wifi_pwd wifi账号密码 返回值: "|2|1|\r" wifi连接状态:wifi断开连接 "|2|2|\r" wifi连接状态:正在连接wifi "|2|3|ip|\r" wifi连接状态:wifi连接成功,返回OB

  • 问题内容: 例如,使用winamp(至少在Windows上),您可以在后台以winamp播放全屏游戏,并使用媒体按钮*控制声音。Winamp不需要聚焦,可以使游戏继续全屏显示。 我更喜欢用Java编写此代码,但这可能行不通(在Java afaik中很难捕获没有重点的击键),因此任何C#解决方案也都可以。 因此,基本问题是:如何在没有重点的情况下捕获击键? *)我相信“后退/前进/停止/邮件/搜索/

  • 我想根据用户名或频道id提取频道信息。此信息来自用于查看该频道的URL。 EX:https://www.youtube.com/user/csga5000,或 https://www.youtube.com/channel/some-channel-id 我有这个代码: 调用的函数是: 这是youtube类的构造函数: 使用“user/csga5000”调用函数也不起作用 打印的结果是: 我只想要