Android Things预览版6从应用调用WiFi设置报错求助
解决Android Things预览版6树莓派3上无法打开WiFi设置界面的问题
我之前在Android Things设备上也碰到过这个坑,问题根源其实很明确:Android Things系统本身并没有预装像手机那样的系统级WiFi设置Activity,所以你调用startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS))时,系统找不到能匹配这个Intent的组件,自然就抛出ActivityNotFoundException了。
为什么手机上能正常运行?
手机的Android系统包含完整的设置应用,里面有专门处理WiFi配置的Activity,这个Intent能被正确识别;但Android Things是针对物联网设备设计的,它精简了大量手机端的系统组件,默认没有这类可视化的系统设置界面。
可行的解决方案
既然没法调用系统设置界面,我们可以直接用Android Things提供的WifiManager API来管理WiFi连接,或者自己做一个简易的WiFi设置UI。
方案1:直接用API管理WiFi
首先在AndroidManifest.xml中添加必要权限:
<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_FINE_LOCATION" /> <!-- 扫描WiFi需要此权限 -->
然后在代码中实现WiFi的扫描与连接逻辑:
// 获取WifiManager实例 WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); // 开启WiFi if (!wifiManager.isWifiEnabled()) { wifiManager.setWifiEnabled(true); } // 扫描周边WiFi网络 wifiManager.startScan(); List<ScanResult> scanResults = wifiManager.getScanResults(); // 连接指定WiFi(示例代码,替换成你的WiFi信息) String targetSsid = "你的WiFi名称"; String targetPassword = "你的WiFi密码"; WifiConfiguration config = new WifiConfiguration(); config.SSID = "\"" + targetSsid + "\""; config.preSharedKey = "\"" + targetPassword + "\""; // 添加配置并连接 int networkId = wifiManager.addNetwork(config); wifiManager.enableNetwork(networkId, true); wifiManager.saveConfiguration();
方案2:自定义WiFi设置界面
如果需要让用户可视化选择WiFi、输入密码,你可以自己开发一个Activity:
- 调用
WifiManager扫描WiFi列表并展示 - 提供输入框让用户填写密码
- 提交时用上面的API完成连接
注意:扫描WiFi需要位置权限,记得在运行时动态申请该权限,否则扫描结果会为空。
内容的提问来源于stack exchange,提问作者HDatta
相关产品推荐
相关产品推荐

