android 视频监听网络改变:
实现在视频播放的时候,网络切换改变,设置广播监听;以便处理4G和wifi之间的切换处理;
广播类:
参考:https://blog.csdn.net/zhangphil/article/details/49643631
/**
* FileName: NetworkConnectChangedReceiver
* Author: bai
* Date: 2019/4/25 18:57
* https://blog.csdn.net/zhangphil/article/details/49643631
*/
public class NetworkConnectChangedReceiver extends BroadcastReceiver {
public interface VideoNetChangeListener{
void netChange(boolean state);
}
private VideoNetChangeListener mVideoNetChangeListener=null;
public NetworkConnectChangedReceiver(VideoNetChangeListener videoNetChangeListener){
mVideoNetChangeListener = videoNetChangeListener;
}
private String getConnectionType(int type) {
String connType = "";
if (type == ConnectivityManager.TYPE_MOBILE) {
connType = "3G网络数据";
} else if (type == ConnectivityManager.TYPE_WIFI) {
connType = "WIFI网络";
}
return connType;
}
@Override
public void onReceive(Context context, Intent intent) {
if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {// 监听wifi的打开与关闭,与wifi的连接无关
int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, 0);
Log.e("TAG", "wifiState:" + wifiState);
switch (wifiState) {
case WifiManager.WIFI_STATE_DISABLED:
break;
case WifiManager.WIFI_STATE_DISABLING:
break;
}
}
// 监听wifi的连接状态即是否连上了一个有效无线路由
if (WifiManager.NETWORK_STATE_CHANGED_ACTION.equals(intent.getAction())) {
Parcelable parcelableExtra = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (null != parcelableExtra) {
// 获取联网状态的NetWorkInfo对象
NetworkInfo networkInfo = (NetworkInfo) parcelableExtra;
//获取的State对象则代表着连接成功与否等状态
NetworkInfo.State state = networkInfo.getState();
//判断网络是否已经连接
boolean isConnected = state == NetworkInfo.State.CONNECTED;
Log.e("TAG", "isConnected:" + isConnected);
mVideoNetChangeListener.netChange(isConnected);
}
}
// 监听网络连接,包括wifi和移动数据的打开和关闭,以及连接上可用的连接都会接到监听
if (ConnectivityManager.CONNECTIVITY_ACTION.equals(intent.getAction())) {
//获取联网状态的NetworkInfo对象
NetworkInfo info = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if (info != null) {
//如果当前的网络连接成功并且网络连接可用
if (NetworkInfo.State.CONNECTED == info.getState() && info.isAvailable()) {
if (info.getType() == ConnectivityManager.TYPE_WIFI) {
Log.e("TAG", getConnectionType(info.getType()) + "连上(wifi)");
} else if (info.getType() == ConnectivityManager.TYPE_MOBILE) {
Log.e("TAG", getConnectionType(info.getType()) + "连上(3g)");
}
} else {
Log.e("TAG", getConnectionType(info.getType()) + "断开");
}
}
}
}
}
播放的页面动态注册监听:
//网络改变的监听广播,用于注册和解注册
private NetworkConnectChangedReceiver registerNetChangeReceiver = null;
/**
* 解注册广播
*/
public void UnRegisterNetworkConnectChangedReceiver(){
mContext.unregisterReceiver(registerNetChangeReceiver);
}
/**
* 初始化资源和View
* @param context Context
*/
public void init(Context context){
//注册广播监听网络的切换和改变
IntentFilter filter = new IntentFilter();
filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
registerNetChangeReceiver = new NetworkConnectChangedReceiver(new NetworkConnectChangedReceiver.VideoNetChangeListener() {
@Override
public void netChange(boolean state) {
onPause();
}
});
context.registerReceiver(registerNetChangeReceiver, filter);
}
或者在manifest.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_NETWORK_STATE" />
<receiver android:name=".utils.NetworkConnectChangedReceiver">
<intent-filter>
<action android:name="android.net.wifi.STATE_CHANGE" />
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
</intent-filter>
</receiver>
具体逻辑自行处理 ,可以断点查看网络变化