WiFi Basestation Connection Management
WiFi Basestation Connection Management Tutorial
1. Overview
Remote controllers typically establish connections with drones through basestations. In addition to direct wired connections, remote controllers can also connect wirelessly to basestations via WiFi. The SDK provides the dragonfish_ext.aar extension package to manage WiFi connection functionality between remote controllers and basestations.
Important Notice The extension package involves operating system function calls and requires specific permissions and signatures. Please refer to the permissions section for proper configuration.
2. Quick Start
2.1 Add Dependencies
First, add dragonfish_ext.aar
to your project:
dependencies {
implementation files('libs/dragonfish_ext.aar')
// Other dependencies...
}
2.2 Basic Usage Flow
// 1. Get WiFi manager instance
val wifiManager = BetaWifiManager.get()
// 2. Add status listener
wifiManager.addListener(object : IBetaWifiListener {
override fun scanResults(list: List<WifiResultBean>) {
// Handle scan results
}
override fun wifiConnect(connect: Boolean, wifiInfo: WifiInfo?) {
// Handle connection status changes
}
override fun wifiRssi(rssi: Int, connectState: Int) {
// Handle signal strength changes
}
override fun onEthernetChange(isConnected: Boolean) {
// Handle wired connection status changes
}
})
// 3. Start scanning basestations
wifiManager.startScan()
// 4. Connect to specified basestation
wifiManager.connectWifi(scanResult, password)
3. BetaWifiManager Detailed Description
3.1 Core Features
BetaWifiManager
provides the following core functionality:
- Auto Connection: Automatically connects to previous basestation based on last connection result
- Connection Switching: WiFi connection automatically disconnects when wired connection succeeds
- Status Monitoring: Provides real-time monitoring of connection status, signal strength, etc.
- Basestation Discovery: Automatically scans and discovers available WiFi basestations
3.2 Main Interface (IWifiManager)
interface IWifiManager {
/**
* Set auto connection feature, enabled by default
* @param connect true to enable auto connection, false to disable
*/
fun setAutoConnect(connect: Boolean)
/**
* Check if auto connection is enabled
* @return true if enabled, false if disabled
*/
fun isAutoConnect(): Boolean
/**
* Check wired network connection status
* @return true if connected, false if not connected
*/
fun isEthConnect(): Boolean
/**
* Connect to specified WiFi basestation with password
* @param result Scan result object
* @param pwd WiFi password
*/
fun connectWifi(result: ScanResult, pwd: String)
/**
* Disconnect current WiFi connection
*/
fun disconnectWifi()
/**
* Start scanning basestations immediately
*/
fun startScan()
/**
* Change password of currently connected basestation
* @param newPwd New password
*/
fun changePassword(newPwd: String)
/**
* Check if currently connected
* @return true if connected, false if not connected
*/
fun isConnect(): Boolean
/**
* Get current WiFi signal strength level
* @return Signal strength level (0-4)
*/
fun getWiRssiLevel(): Int
/**
* Get current connected WiFi information
* @return WiFi result object, returns null when not connected
*/
fun getConnectWifi(): WifiResultBean?
/**
* Add WiFi status listener
* @param l Listener object
*/
fun addListener(l: IBetaWifiListener)
/**
* Remove WiFi status listener
* @param l Listener object
*/
fun removeListener(l: IBetaWifiListener)
/**
* Get current WiFi connection detailed information
* @return WiFi connection information
*/
fun getConnectionInfo(): WifiInfo?
/**
* Get current connected WiFi SSID
* @return SSID string
*/
fun getCurSSID(): String?
/**
* Get current connected WiFi BSSID
* @return BSSID string
*/
fun getCurBSSID(): String?
/**
* Modify password of connected basestation
* @param ssid Basestation SSID
* @param pwd New password
* @param callback Operation result callback
*/
fun modifyBaseStationPwd(ssid: String, pwd: String, callback: (Boolean, IAutelCode) -> Unit)
}
3.3 Status Listener Interface (IBetaWifiListener)
interface IBetaWifiListener {
/**
* WiFi basestation scan result callback
* @param list List of scanned basestations
*/
fun scanResults(list: List<WifiResultBean>)
/**
* WiFi connection status change notification
* @param connect Connection status, true indicates connected
* @param wifiInfo WiFi connection information, null when connection fails
*/
fun wifiConnect(connect: Boolean, wifiInfo: WifiInfo?)
/**
* WiFi signal strength change notification
* @param rssi Signal strength value
* @param connectState Connection state
*/
fun wifiRssi(rssi: Int, connectState: Int)
/**
* Wired connection status change notification
* @param isConnected Wired connection status
*/
fun onEthernetChange(isConnected: Boolean) {}
}
4. Permission Configuration
4.1 Required Permissions
Add the following configuration in AndroidManifest.xml
:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
android:sharedUserId="android.uid.system">
<!-- WiFi related permissions -->
<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" />
<!-- System level permissions -->
<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 configuration -->
</application>
</manifest>
4.2 System Signature Requirements
Due to the use of system-level permissions, the application must be system signed:
- Contact Technical Support: Please contact Autel Intelligent customer service to obtain system signature files
- Signature Configuration: Configure signature information in build.gradle
- Test Environment: Ensure testing on supported devices
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
// Other configurations...
}
}
}
5. Important Notes and Best Practices
5.1 Important Notes
Important Notes
- System Permissions: This functionality requires system-level permissions and cannot be used by regular applications
- Device Compatibility: Only available on supported Autel Intelligent devices
- Network Switching: Wired connection has higher priority than WiFi connection
- Resource Management: Clean up listeners promptly after use to avoid memory leaks
5.2 Best Practices
- Lifecycle Management
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. Troubleshooting
6.1 Common Issues
Issue | Possible Cause | Solution |
---|---|---|
Cannot scan basestations | Insufficient permissions or location permission not granted | Check permission configuration, ensure location permission is granted |
Connection failure | Incorrect password or unstable signal | Confirm password is correct, check signal strength |
Auto connection not working | Auto connection feature is disabled | Call setAutoConnect(true) to enable |
Signature error | System signature not used | Contact technical support for correct signature file |
7. Reference Resources
- Sample Code: WifiManagerFragment
- Extension Package Link: dragonfish_ext.aar
- Technical Support: Contact Autel Intelligent customer service for assistance if you have any questions
8. API Change Log
Version | Changes | Description |
---|---|---|
v2.6 | First version support | Added WiFi basestation connection functionality |