导航
当前位置:首页>>app
在线生成app,封装app

安卓10wifi开发

2023-11-14 围观 : 4次

安卓10系统的WiFi开发主要涉及到以下几个方面:WiFi扫描、连接WiFi、WiFi广播、快速连接、WPS连接、热点设置等。下面将逐一介绍这些方面在安卓10系统中的实现原理及详细开发流程。

一、WiFi扫描

WiFi 扫描是指安卓设备主动搜索周围的 WiFi 热点,获取这些热点的信息,以方便用户选择并连接其中一个热点。Android 提供了 WifiManager 类,可以通过它获取当前可用的 WiFi 列表。

具体实现流程如下:

1. 在 manifest 文件中配置权限:

```

```

2. 获取 WifiManager 实例:

```

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

```

3. 开始扫描 WiFi:

```

wifiManager.startScan();

```

4. 接收扫描结果:

```

List scanResults = wifiManager.getScanResults();

```

二、连接 WiFi

连接 WiFi 是指将 Android 设备连接到已经扫描到的 WiFi 热点。连接 WiFi 通常需要输入 WiFi 密码或者使用 WPS 连接。

1. 手动输入密码连接:

```

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

WifiConfiguration config = new WifiConfiguration();

config.SSID = "SSID名称";

config.preSharedKey = "密码";

wifiManager.addNetwork(config);

```

2. WPS 连接:

```

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

WpsInfo wpsInfo = new WpsInfo();

wpsInfo.setup = WpsInfo.KEYPAD;

wpsInfo.pin = "123456";

wifiManager.startWps(wpsInfo, new WifiManager.WpsCallback() {

@Override

public void onStarted(String pin) {

// 此处处理

}

@Override

public void onSucceeded() {

// 此处处理

}

@Override

public void onFailed(int reason) {

// 此处处理

}

});

```

三、WiFi 广播

系统会监听 WiFi 的变化,比如 WiFi 连接状态、信号强度等信息的变化,这时就需要用到广播了。Android 系统提供了一些广播,其中两个比较重要:WifiManager.SCAN_RESULTS_AVAILABLE_ACTION 和 WifiManager.NETWORK_STATE_CHANGED_ACTION。

1. 扫描结果可用广播:

```

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if (WifiManager.SCAN_RESULTS_AVAILABLE_ACTION.equals(intent.getAction())) {

List scanResults = wifiManager.getScanResults();

// 处理扫描结果

}

}

}, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));

```

2. WiFi 连接状态广播:

```

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {

NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {

// WiFi 连接成功

} else if (networkInfo.getState() == NetworkInfo.State.DISCONNECTED) {

// WiFi 连接断开

}

}

}

}, new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION));

```

四、快速连接

快速连接是指将 Android 设备连接到上一次连接的 WiFi 热点,并跳过密码输入等步骤。

1. 获取上次连接过的 WiFi:

```

String lastSSID = PreferenceManager.getDefaultSharedPreferences(this).getString("lastSSID", "");

if (!TextUtils.isEmpty(lastSSID)) {

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

for (WifiConfiguration config : wifiManager.getConfiguredNetworks()) {

if (config.SSID.equals("\"" + lastSSID + "\"")) {

wifiManager.enableNetwork(config.networkId, true);

break;

}

}

}

```

2. 保存上次连接的 WiFi:

```

registerReceiver(new BroadcastReceiver() {

@Override

public void onReceive(Context context, Intent intent) {

if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {

NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);

if (networkInfo.getState() == NetworkInfo.State.CONNECTED) {

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

String ssid = wifiInfo.getSSID().replace("\"", "");

PreferenceManager.getDefaultSharedPreferences(context).edit().putString("lastSSID", ssid).apply();

}

}

}

}, new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION));

```

五、WPS 连接

WPS 是一种快速连接 WiFi 的方法,它可以跳过密码输入等步骤,便于用户快速连接 WiFi。

1. 显示 WPS 弹窗:

```

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

WifiInfo wifiInfo = wifiManager.getConnectionInfo();

if (wifiInfo != null && wifiInfo.getNetworkId() != -1) {

Button btnWpsConnect = findViewById(R.id.btn_wps_connect);

btnWpsConnect.setVisibility(View.VISIBLE);

btnWpsConnect.setOnClickListener(v -> {

WpsInfo wpsInfo = new WpsInfo();

wpsInfo.BSSID = wifiInfo.getBSSID();

wpsInfo.pin = "123456";

wifiManager.startWps(wpsInfo, new WifiManager.WpsCallback() {

@Override

public void onStarted(String pin) {

// 此处处理

}

@Override

public void onSucceeded() {

// 此处处理

}

@Override

public void onFailed(int reason) {

// 此处处理

}

});

});

}

```

六、热点设置

Android 可以将设备作为热点分享网络给其他设备,实现热点设置的方式非常简单。

1. 开启热点:

```

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

WifiConfiguration wifiConfiguration = new WifiConfiguration();

wifiConfiguration.SSID = "热点名称";

wifiConfiguration.preSharedKey = "热点密码";

wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);

wifiConfiguration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);

wifiConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);

wifiManager.setWifiEnabled(false); // 关闭 WiFi

Method method = wifiManager.getClass().getDeclaredMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);

method.invoke(wifiManager, wifiConfiguration, true); // 开启热点

```

2. 关闭热点:

```

WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);

Method method = wifiManager.getClass().getDeclaredMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);

method.invoke(wifiManager, null, false); // 关闭热点

wifiManager.setWifiEnabled(true); // 开启 WiFi

```

总之,WiFi 在 Android 中的开发非常重要,在实现 Android 系统中的网络功能时也离不开 WiFi。以上介绍了 Android 10 中 WiFi 的基本实现原理与开发流程,对于想要开发安卓10 wifi应用程序的开发者有所帮助。

相关文章
  • applem1对开发软件的影响

    近年来,苹果公司推出的M1芯片已经成为了业内的热门话题,而它对于软件开发领域的影响也是不容忽视的。本文将会从原理、性能和生态三个方面详细介绍M1芯片对于软件开发的影响。一、M1芯片的原理M1芯片是苹果公司自主研发的一种基于ARM架构的便携式处理器,旨在取代传统意义上的Intel x86处理器。相比于...

    2023-11-09
  • app 开发环境

    App开发环境是指用于开发移动应用程序的软件和工具的集合。它包括开发工具、编程语言、集成开发环境(IDE)、测试工具和发布工具等。在移动应用程序开发过程中,开发环境是一个非常重要的因素,因为它可以极大地影响开发人员的工作效率和应用程序的质量。App开发环境的原理App开发环境的原理是利用开发工具和编...

    2023-10-13
  • web-app 文件

    Web应用程序(Web-App)是指可以通过互联网或公司内部网络访问的应用程序。Web应用程序通常运行在Web服务器上,可以使用各种Web浏览器访问,不需要安装任何软件。Web应用程序通常是基于Web技术开发的,包括HTML、CSS、JavaScript等。Web应用程序可以用于各种场景,例如在线购...

    2023-10-17
  • app后端开发工程师招聘工资

    招聘后端开发工程师时,工资的确定因素包括工作地点、公司规模、个人实力、岗位职责等等。在招聘这一岗位时,通常有三种计费方式:固定工资、按项目结算、按实际工作时间计费。固定工资是指公司给予员工的月薪或年薪,不受其他因素干扰,它一般适用于后端开发工程师比较稳定、公司规模较大的情况。按项目结算方式是指根据项...

    2023-11-12
  • 14天学会安卓开发源码

    在现今时代,由于手机的普及,开发安卓应用会成为越来越多人的选择。这里介绍一个14天学会安卓开发的源码教程。第一天:安装环境配置首先要安装Java JDK,并配置相关环境变量。接着下载并安装Android Studio,把插件安装好。在创建新的安卓工程时,会自动生成MainActivity.java和...

    2023-10-31