Android(安卓)- 网络相关
16lz
2021-12-04
广播接受变化
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><receiver android:name="com.rockvr.utils.net.NetworkConnectChangedReceiver"> <intent-filter> <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> <action android:name="android.net.wifi.STATE_CHANGE"/> </intent-filter> </receiver>
public class NetworkConnectChangedReceiver extends BroadcastReceiver { private static final String TAG = "NetworkConnectChanged"; @Override public void onReceive(Context context, Intent intent) { Log.d(TAG, "onReceive() called with: context = [" + context + "], intent = [" + intent + "]"); // 这个监听wifi的打开与关闭与wifi的连接无关 if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) { int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0); Log.i(TAG, "onReceive: wifiState " + wifiState); switch (wifiState) { case WifiManager.WIFI_STATE_DISABLED: NetUtils.setEnableWifi(false); break; case WifiManager.WIFI_STATE_DISABLING: break; case WifiManager.WIFI_STATE_ENABLED: NetUtils.setEnableWifi(true); break; case WifiManager.WIFI_STATE_UNKNOWN: break; default: break; } } // 这个监听wifi的连接状态,即是否连上了一个有效路由,当上面的广播状态是 // WIFI_STATE_DISABLED和WIFI_STATE_DISABLING时,根本不会接收到这个广播. if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) { Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); if (parcelableExtra != null) { NetworkInfo networkInfo = (NetworkInfo) parcelableExtra; NetworkInfo.State state = networkInfo.getState(); NetUtils.setWifi(state == NetworkInfo.State.CONNECTED); } } // 这个监听网络连接的设置,包括wifi和移动数据的打开和关闭 // 最好是用这个。最大的弊端是比较慢 // 如果只监听wifi,上面的比较合适 if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) { ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo activeNetwork = manager.getActiveNetworkInfo(); if (activeNetwork != null) { if (activeNetwork.isConnected()) { if (activeNetwork.getType() == ConnectivityManager.TYPE_WIFI) { NetUtils.setWifi(true); } else if (activeNetwork.getType() == ConnectivityManager.TYPE_MOBILE) { NetUtils.setMobile(true); } } } else { Log.i(TAG, "There is no network connection"); } } }}
主动请求网络状态
private static final int NETWORK_TYPE_NONE = 1;private static final int NETWORK_TYPE_MOBILE = NETWORK_TYPE_NONE << 1;private static final int NETWORK_TYPE_WIFI = NETWORK_TYPE_MOBILE << 1;public static boolean isNetValid(Context context) { if (getNetworkType(context) == NETWORK_TYPE_NONE) { return false; } return true;}public static boolean isMobileNet(Context context) { if (getNetworkType(context) == NETWORK_TYPE_MOBILE) { return true; } return false;}public static boolean isWifiNet(Context context) { if (getNetworkType(context) == NETWORK_TYPE_WIFI) { return true; } return false;}private static int getNetworkType(Context context) { ConnectivityManager connMgr = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); if (networkInfo != null) { switch (networkInfo.getType()) { case ConnectivityManager.TYPE_MOBILE: return NETWORK_TYPE_MOBILE; case ConnectivityManager.TYPE_WIFI: return NETWORK_TYPE_WIFI; } } return NETWORK_TYPE_NONE;}
获取WIFI的IP地址
public static String getLocalIp(Context context) { WifiManager wifiManager = (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); int ipAddress = wifiInfo.getIpAddress(); if (ipAddress == 0) return "Not connect wifi"; return ((ipAddress & 0xff) + "." + (ipAddress >> 8 & 0xff) + "." + (ipAddress >> 16 & 0xff) + "." + (ipAddress >> 24 & 0xff));}
更多相关文章
- Android(安卓)GPS Location with Listener
- android开机自启广播无效果的曲线解决方案
- android 黑屏状态下,开屏代码
- android保存第一次安装状态并初始化数据
- Android(安卓)广播监听USB插拔
- Android监听组合键
- android 多个activity 共用一套广播BroadcastReceiver
- android的Drawable
- 【Android】广播大全(二)