Skip to main content

WiFi基站连接管理

WiFi 基站连接管理教程

1. 概述

遥控器通常通过基站与无人机建立连接。除了直接使用有线连接,遥控器还可以通过基站的WiFi与基站进行无线连接。SDK 提供了 dragonfish_ext.aar 扩展包来管理遥控器和基站的WiFi连接功能。

重要说明 扩展包涉及操作系统的功能调用,需要特定权限和签名。请务必参考权限说明部分进行正确配置。

2. 快速开始

2.1 添加依赖

首先将 dragonfish_ext.aar 添加到您的项目中:

dependencies {
implementation files('libs/dragonfish_ext.aar')
// 其他依赖...
}

2.2 基本使用流程

// 1. 获取WiFi管理器实例
val wifiManager = BetaWifiManager.get()

// 2. 添加状态监听器
wifiManager.addListener(object : IBetaWifiListener {
override fun scanResults(list: List<WifiResultBean>) {
// 处理扫描结果
}

override fun wifiConnect(connect: Boolean, wifiInfo: WifiInfo?) {
// 处理连接状态变化
}

override fun wifiRssi(rssi: Int, connectState: Int) {
// 处理信号强度变化
}

override fun onEthernetChange(isConnected: Boolean) {
// 处理有线连接状态变化
}
})

// 3. 开始扫描基站
wifiManager.startScan()

// 4. 连接指定基站
wifiManager.connectWifi(scanResult, password)

3. BetaWifiManager 详细说明

3.1 核心特性

BetaWifiManager 提供以下核心功能:

  • 自动连接:根据上次连接结果,自动连接到之前的基站
  • 连接切换:有线连接成功后,WiFi连接会自动断开
  • 状态监控:提供连接状态、信号强度等实时监控
  • 基站发现:自动扫描并发现可用的WiFi基站

3.2 主要接口 (IWifiManager)

interface IWifiManager {

/**
* 设置自动连接功能,默认启用
* @param connect true 启用自动连接,false 禁用
*/
fun setAutoConnect(connect: Boolean)

/**
* 检查是否启用了自动连接
* @return true 已启用,false 已禁用
*/
fun isAutoConnect(): Boolean

/**
* 检查有线网络连接状态
* @return true 已连接,false 未连接
*/
fun isEthConnect(): Boolean

/**
* 使用密码连接指定的WiFi基站
* @param result 扫描结果对象
* @param pwd WiFi密码
*/
fun connectWifi(result: ScanResult, pwd: String)

/**
* 断开当前WiFi连接
*/
fun disconnectWifi()

/**
* 立即开始扫描基站
*/
fun startScan()

/**
* 修改当前连接的基站密码
* @param newPwd 新密码
*/
fun changePassword(newPwd: String)

/**
* 检查当前是否已连接
* @return true 已连接,false 未连接
*/
fun isConnect(): Boolean

/**
* 获取当前WiFi信号强度等级
* @return 信号强度等级 (0-4)
*/
fun getWiRssiLevel(): Int

/**
* 获取当前连接的WiFi信息
* @return WiFi结果对象,未连接时返回null
*/
fun getConnectWifi(): WifiResultBean?

/**
* 添加WiFi状态监听器
* @param l 监听器对象
*/
fun addListener(l: IBetaWifiListener)

/**
* 移除WiFi状态监听器
* @param l 监听器对象
*/
fun removeListener(l: IBetaWifiListener)

/**
* 获取当前WiFi连接详细信息
* @return WiFi连接信息
*/
fun getConnectionInfo(): WifiInfo?

/**
* 获取当前连接的WiFi SSID
* @return SSID字符串
*/
fun getCurSSID(): String?

/**
* 获取当前连接的WiFi BSSID
* @return BSSID字符串
*/
fun getCurBSSID(): String?

/**
* 修改已连接基站的密码
* @param ssid 基站SSID
* @param pwd 新密码
* @param callback 操作结果回调
*/
fun modifyBaseStationPwd(ssid: String, pwd: String, callback: (Boolean, IAutelCode) -> Unit)
}

3.3 状态监听接口 (IBetaWifiListener)

interface IBetaWifiListener {

/**
* WiFi基站扫描结果回调
* @param list 扫描到的基站列表
*/
fun scanResults(list: List<WifiResultBean>)

/**
* WiFi连接状态变化通知
* @param connect 连接状态,true表示已连接
* @param wifiInfo WiFi连接信息,连接失败时为null
*/
fun wifiConnect(connect: Boolean, wifiInfo: WifiInfo?)

/**
* WiFi信号强度变化通知
* @param rssi 信号强度值
* @param connectState 连接状态
*/
fun wifiRssi(rssi: Int, connectState: Int)

/**
* 有线连接状态变化通知
* @param isConnected 有线连接状态
*/
fun onEthernetChange(isConnected: Boolean) {}
}

4. 权限配置

4.1 必需权限

AndroidManifest.xml 中添加以下配置:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system">

<!-- 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_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- 系统级权限 -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />

<application
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- 应用配置 -->
</application>
</manifest>

4.2 系统签名要求

由于使用了系统级权限,应用必须进行系统签名:

  1. 联系技术支持:请联系道通智能客服获取系统签名文件
  2. 签名配置:在build.gradle中配置签名信息
  3. 测试环境:确保在支持的设备上进行测试
android {
signingConfigs {
release {
storeFile file('your_system_keystore.jks')
storePassword 'your_store_password'
keyAlias 'your_key_alias'
keyPassword 'your_key_password'
}
}

buildTypes {
release {
signingConfig signingConfigs.release
// 其他配置...
}
}
}

5. 注意事项与最佳实践

5.1 重要注意事项

注意事项

  • 系统权限:此功能需要系统级权限,普通应用无法使用
  • 设备兼容性:仅在支持的道通智能设备上可用
  • 网络切换:有线连接优先级高于WiFi连接
  • 资源管理:使用完毕后要及时清理监听器,避免内存泄漏

5.2 最佳实践

  1. 生命周期管理
class MyActivity : AppCompatActivity() {
private var wifiManager: BetaWifiManager? = null

override fun onResume() {
super.onResume()
wifiManager = BetaWifiManager.get()
wifiManager?.addListener(wifiListener)
}

override fun onPause() {
super.onPause()
wifiManager?.removeListener(wifiListener)
}
}

6. 故障排除

6.1 常见问题

问题可能原因解决方案
无法扫描到基站权限不足或位置权限未授予检查权限配置,确保位置权限已授予
连接失败密码错误或信号不稳定确认密码正确,检查信号强度
自动连接不工作自动连接功能被禁用调用 setAutoConnect(true) 启用
签名错误未使用系统签名联系技术支持获取正确的签名文件

7. 参考资源

8. API变更记录

版本变更内容说明
v2.6首个版本支持增加Wifi基站连接功能