android 视频监听网络改变:

   实现在视频播放的时候,网络切换改变,设置广播监听;以便处理4G和wifi之间的切换处理;

android 视频监听网络改变

广播类:

参考: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>

具体逻辑自行处理 ,可以断点查看网络变化

 

相关文章: