Android 10 Java开发连接指定WiFi的NetworkAvailable?.Invoke代码转写问题
对应Java实现方案
原代码NetworkAvailable?.Invoke(network)是C#语法的事件触发逻辑,作用是在WiFi网络可用时,将当前有效Network实例通知给监听该事件的后续业务逻辑。Java没有原生的事件语法,你可以通过自定义接口回调实现同等效果,步骤如下:
- 首先自定义网络可用回调接口
public interface OnNetworkAvailableListener { void onNetworkAvailable(Network network); }
- 在你封装WiFi连接逻辑的类中声明监听器实例,提供对外设置入口
// 类全局变量 private OnNetworkAvailableListener mNetworkAvailableListener; // 外部设置监听器的公共方法 public void setOnNetworkAvailableListener(OnNetworkAvailableListener listener) { this.mNetworkAvailableListener = listener; }
- 在
onAvailable回调中替换对应逻辑即可
final ConnectivityManager.NetworkCallback networkCallback = new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(@NonNull Network network) { super.onAvailable(network); Log.i(TAG, "Connected to network with WIFI capabilities"); // 完全等价原NetworkAvailable?.Invoke(network)的实现 if (mNetworkAvailableListener != null) { mNetworkAvailableListener.onNetworkAvailable(network); } } // 其余回调方法保持原有逻辑即可 };
- 业务侧需要监听网络可用事件时,调用设置监听器的方法接收回调即可
// 示例:在Activity中使用 yourWifiConnectInstance.setOnNetworkAvailableListener(network -> { // 此处写网络可用后的业务逻辑,比如绑定进程默认网络、发起业务请求等 ConnectivityManager.setProcessDefaultNetwork(network); });
补充注意事项
- Android 10及以上版本需要保证应用已动态申请
ACCESS_FINE_LOCATION权限,同时 manifest 中已声明CHANGE_WIFI_STATE、ACCESS_WIFI_STATE、INTERNET权限 - 网络回调默认运行在子线程,如需操作UI需要手动切换到主线程执行
内容的提问来源于stack exchange,提问作者Delfina Martin
相关产品推荐
相关产品推荐

