【 Android11 无线热点开发 】无线AP开与关、无线AP信息获取

前言


前面四篇文章介绍完了有线网络、无线网络的开发过程,下面介绍下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热点、使能热点,至此开启成功。
⑤、关闭开关,禁用热点。
⑥、点击查看热点信息按钮,获取热点信息,弹窗展示热点信息

【 Android11 无线热点开发 】无线AP开与关、无线AP信息获取_第1张图片


实现


无线热点APWiFi一样,通过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上有关网络部分功能都已介绍完毕。

你可能感兴趣的:(Android网络,Android,AP,Android无线热点,startTethering,stopTethering)