java - 从后台服务切换 WIFI
问题描述
我需要让我的服务在按下按钮时切换 Wifi。我发现这段代码是一个可行的解决方案
WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(!wifiManager.isWifiEnabled());
加上适当的权限
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
但是,从后台服务运行该代码会导致服务冻结!没有任何捕获的异常的异常行为。
我最好的解决方案是将服务中的 Intent 发送到一个空活动以从那里启动 Wifi(它可以工作!)但是为什么直接从服务启动它不起作用?
解决方案
服务在主线程中运行,适合长时间操作,与 UI 没有交互,任何冻结 UI 的事情都应该在后台完成。最好从 Service 发送广播,而您的广播接收器处理代码。作为示例,您可以查看:服务和广播接收器,您可以在其中添加:
private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
wifiManager.setWifiEnabled(!wifiManager.isWifiEnabled());
}
};
@Override
protected void onResume() {
super.onResume();
registerReceiver(broadcastReceiver, new IntentFilter(STR_RECEIVER));
}
@Override
protected void onPause() {
super.onPause();
unregisterReceiver(broadcastReceiver);
}
并从 Service 发送广播:
Intent intent = new Intent(STR_RECEIVER);
sendBroadcast(intent);
推荐阅读
- robotframework - 测试用例中的机器人框架脚本退出失败且不继续
- php - Wordpress - 子页面“博客”上的帖子
- polymer - 聚合物元素纸标签 - 聚合物 3 中的错误
- android - 实施 Firebase 推送通知时出现控制台日志错误
- android - Firestore:完全禁用读写缓存
- php - 如何为 Wordpress 子主题中的图像提供正确的路径
- java - Firebase 是否每次都从服务器查询
- wordpress - Buddypress 会员插件 wordpress 问题
- android - 用于 Android 和 Arduino Uno 之间 USB 串行通信的读取器线程
- windows - 如何重命名文件夹,以便在 Windows 中对带有日期前缀和名称的文件夹进行排序?