Android kotlin 跳转手机热点开关页面和判断热点是否打开
- 判断热点是否打开
- 跳转手机热点开关页面
- 其他热点的一些相关知识
-
- [Local-only hotspot](#Local-only hotspot)
- 参考
判断热点是否打开
网上方法比较多,我这边使用了通过WifiManager 拿反射的getWifiApState方法获取判断,亲测可用,最近迷上了扩展方法【dog】
kotlin
fun Activity.isWifiApOpen(): Boolean {
try {
val manager = this.getSystemService(Context.WIFI_SERVICE) as WifiManager
//通过放射获取 getWifiApState()方法
val method = manager.javaClass.getDeclaredMethod("getWifiApState")
//调用getWifiApState() ,获取返回值
val state = method.invoke(manager) as Int
//通过放射获取 WIFI_AP的开启状态属性
val field: Field = manager.javaClass.getDeclaredField("WIFI_AP_STATE_ENABLED")
//获取属性值
val value = field.get(manager) as Int
//判断是否开启
return state == value
} catch (e: NoSuchMethodException) {
e.printStackTrace()
} catch (e: IllegalAccessException) {
e.printStackTrace()
} catch (e: InvocationTargetException) {
e.printStackTrace()
} catch (e: NoSuchFieldException) {
e.printStackTrace()
}
return false
}
跳转手机热点开关页面
跳转手机热点的页面肯定是用intent,重点是action不知道是什么,网上最常见的就是Settings.ACTION_WIFI_SETTINGS 跳转wifi设置页面,费了一番力气,同样写为扩展方法,我试过是可以跳转热点设置页面的
值得注意的是,在部分机型或特殊情况下可能会没有这个activity,因为framework层可能更改名称,所以要做好准备
kotlin
fun Activity.startWifiActivity(){
val intent = Intent(Settings.ACTION_WIRELESS_SETTINGS)
this.startActivity(intent)
}
顺带介绍一些其他常用的设置页面跳转
同样在部分机型或特殊情况下可能会没有这个activity,得自己试试
-
ACTION_SETTINGS
顾名思义 跳转到系统设置页面
-
ACTION_APN_SETTINGS
跳转 APN设置界面
-
ACTION_LOCATION_SOURCE_SETTINGS
跳转位置服务界面(管理已安装的应用程序)
-
ACTION_AIRPLANE_MODE_SETTINGS
跳转飞行模式设置页面
-
ACTION_APPLICATION_DEVELOPMENT_SETTINGS
跳转开发者选项页面
-
ACTION_APPLICATION_SETTINGS
跳转应用程序列表界面
-
ACTION_BLUETOOTH_SETTINGS
跳转蓝牙设置页面
其他热点的一些相关知识
如果你的热点不需要联网,可以使用Local-only hotspot
Local-only hotspot
Local-only hotspot 通过配置local-only热点,连接到Wi-Fi热点的设备上的应用可以相互通信。用这种方法创建的网络将不能访问Internet。每个应用程序只能对热点进行一次请求,但多个应用程序可以同时请求热点。当多个应用程序成功并发注册时,它们共享底层热点。onstarted (localonlyhotspotrevation)在热点准备就绪时被调用。
如果我们的应用程序针对Android 13 (API级别33)或更高版本,则必须请求NEARBY_WIFI_DEVICES使用仅限本地的热点,如下面的代码片段所示。针对较早版本Android的应用必须请求ACCESS_FINE_LOCATION。
kotlin
<manifest ...>
<<!-- If your app targets Android 13 (API level 33)
or higher, you must declare the NEARBY_WIFI_DEVICES permission. -->
<uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES"
<!-- If your app derives location information from
Wi-Fi APIs, don't include the "usesPermissionFlags"
attribute. -->
android:usesPermissionFlags="neverForLocation" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"
<!-- If any feature in your app relies on
precise location information, don't include the
"maxSdkVersion" attribute. -->
android:maxSdkVersion="32" />
<application ...>
...
</application>
</manifest>
对应方法
WifiManager中的
java
public void startLocalOnlyHotspot (WifiManager.LocalOnlyHotspotCallback callback,
Handler handler)
可以同时连多个,开启失败在callback中会有回调