前言
前面四篇文章介绍完了有线网络、无线网络的开发过程,下面介绍下Android 11
上网络的终结篇,无线热点的开发流程。
相关文章
1、【 Android11 WiFi开发 一 】WiFi列表获取与展示
2、【 Android11 WiFi开发 二 】WiFi连接、断开
3、【 Android11 WiFi开发 三 】WiFi信息获取与静态IP设置链接描述
4、【 Android11 有线网络开发 】网络信息获取、静态IP设置
说明
首先,梳理下热点功能的流程,打开和关闭热点、查看热点信息。
①、进入页面,判断当前热点开关是否打开?如果未打开进入Step②,否则进入Step⑤或Step⑥。
②、打开开关,选择频率(2.4Ghz或者5Ghz)、加密方式、输入名称和热点密码,进入Step③。
③、创建热点配置,判断当前热点是否使能(外部打开热点),如果未使能,则进入Step④
④、保存创建的AP热点、使能热点,至此开启成功。
⑤、关闭开关,禁用热点。
⑥、点击查看热点信息按钮,获取热点信息,弹窗展示热点信息
实现
无线热点AP
和WiFi
一样,通过WifiManager
来管理对应的功能。
private val connectivityManager: ConnectivityManager = context.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
private val wifiManager = context.getSystemService(Context.WIFI_SERVICE) as WifiManager
1、无线热点ap使能状态
/**
* 热点是否使能
*/
fun isWiFiAPEnable():Boolean{
return wifiManager.wifiApState == WifiManager.WIFI_AP_STATE_ENABLED
}
2、开启热点
/**
* 打开热点AP
*/
fun openWiFiAP(band:Int, ssid:String, secure: Int, password: String?){
val config = createAPConfig(band,ssid,secure,password)
if(isWiFiAPEnable()){
setWiFiAPEnable(false)
}
wifiManager.setSoftApConfiguration(config)
}
3、创建热点配置
/**
* 创建新的AP配置
*/
private fun createAPConfig(band:Int, ssid:String, security: Int, password: String?):SoftApConfiguration{
val builder = SoftApConfiguration.Builder()
builder.setSsid(ssid)
if(security == SoftApConfiguration.SECURITY_TYPE_WPA2_PSK){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
builder.setPassphrase(password,SoftApConfiguration.SECURITY_TYPE_WPA2_PSK)
}
}
builder.setBand(band)
return builder.build()
}
4、使能或禁用热点
/**
* 设置WiFi热点是否使能
*/
fun setWiFiAPEnable(on: Boolean) {
if (on) {
val callback = object : ConnectivityManager.OnStartTetheringCallback() {
override fun onTetheringStarted() { if(App.DEBUG) Log.i(TAG,"onTetheringStarted") }
override fun onTetheringFailed() { if(App.DEBUG) Log.i(TAG,"onTetheringFailed") }
}
connectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, true, callback, Handler(Looper.getMainLooper()))
} else {
connectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI)
}
}
5、获取热点配置
/**
* 获取热点配置
*/
fun getWiFiAPConfig():SoftApConfiguration{
return wifiManager.getSoftApConfiguration()
}
/**
* 获取无线热点信息
* @see[secure] 热点安全类型
* @see[hotspotBand] 热点频率2.4Ghz或5Ghz
*/
private fun getWiFiAPData(){
WiFiAPManager.getWiFiAPConfig().apply {
hotspotSSID = if(ssid?.isEmpty() == true) "" else ssid.toString()
secure = securityType
hotspotPw = passphrase
hotspotBand = band
}
}
6、设置热点名称
/**
* 设置热点名称
*/
fun setWiFiAPName(name: String) {
val config: WifiConfiguration? = wifiManager.getWifiApConfiguration()
config?.SSID = name
wifiManager.setWifiApConfiguration(config)
}
结尾
至此,Android11
上有关网络部分功能都已介绍完毕。