You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kotlin中如何用ActivityResultContract获取WiFi设置返回的布尔结果

解决ActivityResultContract从WiFi设置页面返回始终false的问题

问题根源

Android系统自带的WiFi设置页面(Settings.ACTION_WIFI_SETTINGS),无论用户是主动按返回键退出,还是修改设置后退出,都会返回RESULT_CANCELED,永远不会返回RESULT_OK。你原代码中用resultCode == Activity.RESULT_OK作为判断条件,自然永远返回false。

解决方案

要实现“从WiFi设置页面返回时返回true,其他场景返回false”的需求,可按以下方式修改:

1. 修正ActivityResultContract代码

修改parseResult的判断逻辑,只要进入该方法,就说明用户是从WiFi设置页面返回的,直接返回true:

class WifiSettingChangeContract : ActivityResultContract<Unit?, Boolean>() {

    override fun createIntent(context: Context, input: Unit?): Intent {
        return Intent(Settings.ACTION_WIFI_SETTINGS)
    }

    override fun parseResult(resultCode: Int, intent: Intent?): Boolean {
        // 只要触发该方法,就代表用户从WiFi设置页面返回
        return true
    }
}

2. 处理启动失败的场景

如果设备不支持WiFi,或者因系统限制无法启动WiFi设置页面,调用launch时会抛出ActivityNotFoundException,此时可捕获异常并处理返回false的逻辑:

// 在Activity/Fragment中注册Contract
val wifiSettingContract = registerForActivityResult(WifiSettingChangeContract()) { isFromWifiSettings ->
    // 这里isFromWifiSettings为true,代表从WiFi设置页面返回
}

// 启动WiFi设置页面时的调用逻辑
try {
    wifiSettingContract.launch(null)
} catch (e: ActivityNotFoundException) {
    // 无法启动WiFi设置页面,处理返回false的场景
}

补充说明

你提到的“从锁屏等其他页面返回”不会触发parseResult回调——只有当用户关闭WiFi设置页面时,才会执行parseResult并返回true;锁屏回到应用属于应用从后台唤醒,不会触发该Contract的回调逻辑,无需额外处理。

内容的提问来源于stack exchange,提问作者Blazerstrom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 10:35:30