安卓10wifi开发

安卓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应用程序的开发者有所帮助。


相关知识:
安卓app h5 开发
随着移动互联网的发展,越来越多的网站开始提供移动端的访问方式。而基于移动浏览器的H5开发成为了众多网站的首选,那么今天我们就一起来了解一下安卓App H5开发的原理和详细介绍吧。一、什么是安卓App H5开发H5就是指HTML5,是一种基于Web标准的跨平
2023-05-23
安卓10开发者模式怎么关
Android 10开发者模式在手机用户的日常使用中是一个非常重要的功能选择。它可以让用户拥有更多的权限来掌控手机的运行状态,由于很多人并不熟悉开发者模式,因此在使用时常常会遇到各种问题。开发者模式中的选择都是非常高级的,所以如果一旦出现不合适的设置,那么
2023-05-23
安卓 手机开发
安卓手机开发是指利用安卓操作系统进行手机应用程序的开发。安卓操作系统基于Linux内核,由谷歌公司开发,目前是全球最流行的移动操作系统之一。安卓手机开发主要使用Java编程语言,结合安卓SDK开发工具,配合安卓模拟器进行手机应用程序的开发测试。一、安卓应用
2023-05-23
turtle安卓手机开发
Turtle是一款为移动应用提供3D渲染功能的跨平台游戏引擎,可以在安卓和iOS等平台上使用。Turtle引擎支持多种编程语言开发,并提供了良好的开发文档和示例代码。Turtle引擎提供了一套完整的3D渲染引擎,包括资源加载、模型渲染、材质渲染、光影渲染等
2023-05-23
eosjs安卓开发
EOSJS是一个JavaScript库,用于与EOS区块链交互。它提供了一组API,可以让开发人员轻松地创建、接收和传输EOS交易。EOSJS在EOS网络中扮演着重要的角色,使得Dapp的开发变得更加简单。在安卓开发中,EOSJS同样起着非常重要的作用,下
2023-05-23
b站天哥安卓开发教程笔记
B站天哥的安卓开发教程可以说是非常详细和全面的,其课程内容从基础的 UI 设计到进阶的网络编程都有所涉及。本文将结合自己的学习经验,对其中一些主要的内容模块做一些原理或详细介绍。1. UI 开发UI 开发是安卓应用中最基础也是最重要的一部分,它的外观和交互
2023-05-23
安卓系统app开发 与底层互动
安卓系统的应用程序开发,是在Java语言基础上开发。要与底层互动,就需要了解Android系统的底层实现。Android系统是基于Linux内核的,它提供了许多C/C++库及JNI框架供Java程序使用,以支持和平滑地与设备硬件进行通信和协作。底层C/C+
2023-04-28
安卓开发题库app
安卓开发题库app是一款适用于Android系统的移动应用程序,其主要目的是为了提供Android开发相关的知识点、案例和练习题等资源,帮助想要学习或提升Android开发技能的用户进行自我学习和测试。一般来说,安卓开发题库app的实现需要采用一些前端和后
2023-04-28
安卓app定制开发报价软件
安卓app定制开发,需要针对不同的需求进行不同的开发方案和工作量评估,因此报价不是一个固定的数值,而需要根据具体情况来评估。以下是一些可能影响安卓app定制开发报价的因素:1. 功能需求:app的功能需求是决定其开发难度和工作量的关键因素。通常来说,功能需
2023-04-28
原生安卓app打包
Android应用程序以apk形式分发,其中apk即为Android Package的缩写。这个apk文件可以通过Android Studio中的编译打包工具Gradle构建。Gradle是一个用于自动化构建、测试和部署软件的开源构建工具。以下是原生And
2023-04-28
南京安卓app开发收费多少
由于南京安卓app开发的收费标准是根据项目的复杂程度和工作量来定价的,因此很难给出一个固定的价格范围。以下是一些可能会影响南京安卓app开发收费的因素:1. 功能和复杂程度:app的功能越多,开发难度就越大,因此价格也就更高。例如,一个单纯的信息展示app
2023-04-28
ios 安卓app开发
iOS和Android App开发:原理与详细介绍随着智能手机市场的蓬勃发展,iOS和Android这两大平台已经成为了移动应用开发的主力军。了解iOS和Android App的开发原理,是每个入门移动应用开发者所需的基础知识。本文章将详细介绍iOS和An
2023-04-28
©2015-2023 安卓益APP Anzhuoe.com 蜀ICP备17007734号-1