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 系统签名要求
由于使用了系统级权限,应用必须进行系统签名:
- 联系技术支持:请联系道通智能客服获取系统签名文件
- 签名配置:在build.gradle中配置签名信息
- 测试环境:确保在支持的设备上进行测试
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 最佳实践
- 生命周期管理
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. 参考资源
- 示例代码:WifiManagerFragment
- 扩展包链接:dragonfish_ext.aar
- 技术支持:如有问题请联系道通智能客服获取帮助
8. API变更记录
版本 | 变更内容 | 说明 |
---|---|---|
v2.6 | 首个版本支持 | 增加Wifi基站连接功能 |