wmycom 2023-09-22 13:50 采纳率: 66.7%
浏览 11
已结题

android8以下机子自动连接指定wifi热点

因项目需要,安卓7、安卓8的手机,需要连接指定的wifi
可考虑 android代码或者adb指令

  • 写回答

5条回答 默认 最新

  • 专家-赤兔[在线] 2023-09-22 13:55
    关注

    引用 皆我百晓生 小程序回应内容作答:
    您可以使用以下的代码示例来连接指定的 WiFi 热点:

    1. 需要在 AndroidManifest.xml 文件中添加如下权限:

      <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
      <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
      
    2. 在您的 Java 文件中,可以使用以下代码连接指定的 WiFi 热点:
      ```java
      import android.content.Context;
      import android.net.wifi.ScanResult;
      import android.net.wifi.WifiConfiguration;
      import android.net.wifi.WifiManager;

    public class WifiConnector {

    public static void connectToWifi(Context context, String ssid, String password) {
        WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
        wifiManager.setWifiEnabled(true);
        wifiManager.startScan();
    
        WifiConfiguration wifiConfig = new WifiConfiguration();
        wifiConfig.SSID = "\"" + ssid + "\"";
        wifiConfig.preSharedKey = "\"" + password + "\"";
    
        for (ScanResult scanResult : wifiManager.getScanResults()) {
            if (scanResult.SSID.equals(ssid)) {
                int networkId = wifiManager.addNetwork(wifiConfig);
                wifiManager.disconnect();
                wifiManager.enableNetwork(networkId, true);
                wifiManager.reconnect();
                break;
            }
        }
    }
    

    }

    
    3. 在您的 Activity 或其他地方调用这个方法,传入指定的 WiFi 名称(SSID)和密码:
    ```java
    WifiConnector.connectToWifi(getApplicationContext(), "YourWiFiSSID", "YourWiFiPassword");
    

    请注意,连接 WiFi 需要授予相关权限,并且某些 Android 版本可能需要用户手动确认连接。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
  • CSDN-Ada助手 CSDN-AI 官方账号 2023-09-22 16:06
    关注

    【以下回答由 GPT 生成】

    我可以帮助你解决这个问题。以下是一种使用Android代码和adb指令使Android 8及以下版本的手机自动连接到指定的Wi-Fi热点的方法:

    1. Android代码方法: 首先,你需要在AndroidManifest.xml文件中添加以下权限: <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />

    2. 在你想要连接到Wi-Fi的地方,你可以使用以下代码来连接到指定的Wi-Fi热点: java WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); // 检查Wi-Fi是否打开 if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); } // 断开当前连接的Wi-Fi wifiManager.disconnect(); wifiManager.enableNetwork(networkId, true); wifiManager.reconnect(); 其中,networkId是你要连接的Wi-Fi热点的网络ID,你可以通过以下代码获取到网络ID: java List<WifiConfiguration> wifiConfigurations = wifiManager.getConfiguredNetworks(); for (WifiConfiguration config : wifiConfigurations) { if (config.SSID != null && config.SSID.equals("\"" + ssid + "\"")) { networkId = config.networkId; break; } }

    3. adb指令方法: 如果你希望使用adb命令来连接Wi-Fi,你可以在终端或命令行中执行以下adb命令: adb shell am start -a android.intent.action.MAIN -n com.android.settings/.wifi.WifiSettings adb shell input keyevent 19 && adb shell input keyevent 23 adb shell input text "YOUR_WIFI_SSID" adb shell input keyevent 20 && adb shell input keyevent 23 adb shell input text "YOUR_WIFI_PASSWORD" adb shell input keyevent 20 && adb shell input keyevent 23 adb shell input keyevent 4 && adb shell input keyevent 66 其中,YOUR_WIFI_SSID是你要连接的Wi-Fi热点的名称,YOUR_WIFI_PASSWORD是Wi-Fi的密码。

    请注意,以上代码和adb命令可能需要根据你的具体环境和需求进行适当的修改。由于Android版本的差异和限制,可能无法保证在所有设备上都能完美运行。在实施之前,建议你先在适当的设备上测试这些代码和命令。



    【相关推荐】



    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论
  • Leodong. 2023-09-22 16:35
    关注

    该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
    【第一种方式】
    在Android 8(Oreo)及以下版本中,您可以使用以下方法自动连接指定的WiFi热点:

    1. 使用代码连接WiFi热点:
      您可以在应用程序中使用Android的WifiManager类来连接指定的WiFi热点。以下是一个示例代码片段,展示了如何连接一个已知的WiFi热点:

      import android.net.wifi.WifiConfiguration;
      import android.net.wifi.WifiManager;
      import android.content.Context;
      
      public class WifiConnector {
          private WifiManager wifiManager;
      
          public WifiConnector(Context context) {
              wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
          }
      
          public void connectToWifi(String ssid, String password) {
              WifiConfiguration wifiConfig = new WifiConfiguration();
              wifiConfig.SSID = "\"" + ssid + "\"";
              wifiConfig.preSharedKey = "\"" + password + "\"";
      
              int networkId = wifiManager.addNetwork(wifiConfig);
              wifiManager.disconnect();
              wifiManager.enableNetwork(networkId, true);
              wifiManager.reconnect();
          }
      }
      

      您可以在需要连接WiFi的地方调用connectToWifi方法,并传入要连接的WiFi的SSID和密码。

    2. 使用ADB命令连接WiFi热点:
      如果您想通过ADB命令连接WiFi热点,可以在设备上运行以下命令:

      adb shell am start -a android.settings.WIFI_SETTINGS
      

      该命令将打开设备的WiFi设置页面。然后,您可以手动选择要连接的WiFi热点,并输入密码进行连接。

    请注意,连接WiFi热点可能需要用户的授权和权限。在Android 6(Marshmallow)及以上版本中,您需要在应用程序的清单文件中声明android.permission.CHANGE_WIFI_STATE权限。此外,您还需要在运行时获取该权限。

    请根据您的具体需求选择适合的方法,并根据需要在应用程序中或通过ADB命令执行相应的操作。


    【第二种方式】
    对于Android 7和8以下的设备,可以通过在代码中添加以下权限来实现自动连接指定的WiFi热点:

    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    

    然后,在你的代码中,可以使用以下方法来连接到指定的WiFi热点:

    import android.content.Context;
    import android.net.wifi.WifiConfiguration;
    import android.net.wifi.WifiManager;
    
    public void connectToHotspot(String ssid, String password) {
        WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        
        // 如果WiFi未打开,则打开WiFi
        if (!wifiManager.isWifiEnabled()) {
            wifiManager.setWifiEnabled(true);
        }
        
        // 创建WiFi配置
        WifiConfiguration wifiConfig = new WifiConfiguration();
        wifiConfig.SSID = "\"" + ssid + "\""; // 设置WiFi名称(包含双引号)
        wifiConfig.preSharedKey = "\"" + password + "\""; // 设置WiFi密码(包含双引号)
        
        // 添加并保存WiFi配置
        int netId = wifiManager.addNetwork(wifiConfig);
        wifiManager.disconnect(); // 断开当前连接
        wifiManager.enableNetwork(netId, true); // 启用新连接
        wifiManager.reconnect(); // 重新连接
    }
    

    请注意,上述代码中的ssid参数是你要连接的WiFi热点的名称,password参数是该热点的密码。确保将这两个参数替换为你实际要连接的WiFi热点的信息。

    另外,如果你需要在Android 7或8上使用ADB指令来实现自动连接指定的WiFi热点,你可以使用以下命令:

    adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
    adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false
    adb shell wpa_supplicant -B -Dwext -i wlan0 auto_connected=yes
    adb shell input keyevent 23
    

    这些指令会依次执行以下操作:

    1. 发送广播以启用飞行模式。
    2. 发送广播以关闭飞行模式。
    3. 使用WPA Supplicant工具将设备连接到指定的WiFi热点。
    4. 模拟按键事件以保持WiFi连接。

    请确保在执行这些指令之前,你已经正确设置了ADB并且设备已连接到计算机上。


    如果以上回答对您有所帮助,点击一下采纳该答案~谢谢

    评论
  • 数据大魔王 2023-09-22 18:50
    关注

    Android

    import android.content.Context;
    import android.net.wifi.WifiConfiguration;
    import android.net.wifi.WifiManager;
    
    public class WifiUtils {
        public static void connectToWifi(Context context, String ssid, String password) {
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
            WifiConfiguration wifiConfig = new WifiConfiguration();
            wifiConfig.SSID = "\"" + ssid + "\"";
            wifiConfig.preSharedKey = "\"" + password + "\"";
    
            int netId = wifiManager.addNetwork(wifiConfig);
            wifiManager.disconnect();
            wifiManager.enableNetwork(netId, true);
            wifiManager.reconnect();
        }
    }
    
    
    
    评论
  • 呈两面包夹芝士 2023-09-22 20:08
    关注

    引自GPT
    对于连接指定的WiFi,你可以使用Android代码或ADB指令来实现。

    如果你想通过Android代码来连接指定的WiFi,可以使用以下步骤:

    1. 首先,获取到WifiManager对象,它提供了管理Wifi连接的方法。
    2. 创建一个WifiConfiguration对象,并设置要连接的WiFi的SSID(网络名称)和密码。
    3. 使用WifiManager对象的addNetwork方法将配置的WiFi添加到系统中。
    4. 调用WifiManager对象的enableNetwork方法启用该WiFi连接。
    5. 最后,使用WifiManager对象的reconnect()方法尝试重新连接到该WiFi。

    下面是一个示例代码片段,演示了如何使用Android代码连接指定的WiFi:

    import android.content.Context;
    import android.net.wifi.WifiConfiguration;
    import android.net.wifi.WifiManager;
    
    public class WifiConnector {
        private Context context;
    
        public WifiConnector(Context context) {
            this.context = context;
        }
    
        public void connectToSpecificWifi(String ssid, String password) {
            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    
            WifiConfiguration wifiConfig = new WifiConfiguration();
            wifiConfig.SSID = "\"" + ssid + "\""; // 注意SSID需要用双引号括起来
            wifiConfig.preSharedKey = "\"" + password + "\""; // 注意密码也需要用双引号括起来
    
            int netId = wifiManager.addNetwork(wifiConfig);
            wifiManager.enableNetwork(netId, true);
            wifiManager.reconnect();
        }
    }
    

    请注意,上述代码中的connectToSpecificWifi方法接受一个SSID和密码作为参数,你需要将其替换为你要连接的实际WiFi的SSID和密码。

    另外,如果你希望通过ADB指令来连接指定的WiFi,可以使用以下命令:

    adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state true
    adb shell am broadcast -a android.intent.action.AIRPLANE_MODE --ez state false
    adb shell wpa_supplicant -B -Dwext -i wlan0 auto_country=US auto_network=your_wifi_ssid key_mgmt=WPA-PSK -c/path/to/your/wifi/password
    

    上述ADB指令中,your_wifi_ssid应替换为你要连接的实际WiFi的SSID,/path/to/your/wifi/password应替换为WiFi密码的实际路径。请确保在执行这些指令之前已经正确设置了ADB环境,并且设备已连接到计算机上。

    希望以上信息对你有所帮助!

    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 9月30日
  • 已采纳回答 9月22日
  • 创建了问题 9月22日

悬赏问题

  • ¥15 shopify网站提速
  • ¥15 深海控制器DSE7320MKII和博世ECU间can通讯知识
  • ¥15 Ru的复折射率用于FDTD 200nm到1200nm
  • ¥15 使用Fiddler抓包,textview的乱码如何解决
  • ¥50 trio连接驱动器报错
  • ¥15 有谁懂nhanes的权重计算啊
  • ¥15 欧姆龙PLC 电机控制 限位
  • ¥30 如何处理shell命令接收到的视频流并实时播放出来
  • ¥15 虚心请教C#的代码优化问题
  • ¥15 有偿求做台风过境全过程模拟仿真