最近测试那边提了一个bug,经过排查后发现其原因:是因为连接的Wi-Fi无法上网,因此在Android系统的多网络策略中,可以上网的SIM移动网络被设置为系统默认网络,投屏组件docker传输与反控模块和scbee流媒体传输模块都未绑定Wi-Fi网络,模块进程默认使用系统默认网络,因此无法投屏成功。而P2P投屏不存在此问题,P2P网络属于本地Local局域网,网络路由规则高于系统默认网络,因此不受影响。

解决办法:在投屏组件docker传输与反控模块和scbee流媒体传输模块中新增网络绑定接口,为每次连接指定网络通路。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
public static final int TYPE_DEFAULT = -1;
public static final int TYPE_WIFI_STA = 0;
public static final int TYPE_WIFI_P2P = 1; public static void bindNetworkToProcess(Context context, int networkType) {
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(
Context.CONNECTIVITY_SERVICE);
if (null != connManager) {
if (networkType != TYPE_DEFAULT) {
Network[] networkList = connManager.getAllNetworks();
for (Network network : networkList) {
NetworkInfo networkInfo = connManager.getNetworkInfo(network);
if (networkInfo.getType() == networkType) {
LogUtils.d(TAG, "bindNetworkToProcess: " + networkInfo.toString());
connManager.bindProcessToNetwork(network);
return;
}
}
LogUtils.e(TAG, "bindNetworkToProcess not found type: " + networkType);
} else {
connManager.bindProcessToNetwork(null);
LogUtils.d(TAG, "unbindNetworkToProcess");
}
} else {
LogUtils.e(TAG, "bindNetworkToProcess get CONNECTIVITY_SERVICE failed!");
}
} public static int convertNetworkType(int networkType) {
switch (networkType) {
case Constant.TYPE_WIFI_STA:
return ConnectivityManager.TYPE_WIFI;
case Constant.TYPE_WIFI_P2P:
default:
return Constant.TYPE_DEFAULT;
}
}

调用的地方:

// 绑定网络
Utils.bindNetworkToProcess(getBaseContext(), Utils.convertNetworkType(networkType)); // 取消绑定网络
Utils.bindNetworkToProcess(getBaseContext(), TYPE_DEFAULT);

使用ConnectivityManager.bindProcessToNetwork绑定特殊网络的更多相关文章

  1. android ConnectivityManager 检查是否有网络

    一.   ConnectivityManager 概要 ConnectivityManager是网络连接相关的管理器,它主要用于查询网络状态并在网络发生改变时发出状态变化通知.这个类主要负责的下列四个 ...

  2. IP-MAC绑定导致网络故障

    前段时间将一台服务器A的服务迁移至了另外一台服务器B,外网IP地址也顺带迁移过来了,结果网络出现了问题. 其中内网是畅通的,但是外网IP怎么都连不上另外一台路由C(B和C是在一个交换机下的,网段也相同 ...

  3. 5、android ConnectivityManager获取网络状态

    ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 ...

  4. 6、android 网络编程

    1.基于socket的用法 服务器端: 先启动一个服务器端的socket     ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s  ...

  5. Android网络连接判断与处理

    博客分类: Android 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android ...

  6. android 检查网络连接状态实现步骤

    获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.AC ...

  7. android ping网络是否成功

    public static boolean pingHost(String str) { //str 为要ping的IP地址 boolean result = false; try { Process ...

  8. Android 判断wifi和4G网络是否开启

    public boolean isWifiAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) g ...

  9. xUtils3源码分析(一):view的绑定

    概述 xUtils3是国人开发的一款功能丰富的Android快速开发框架,值得研究下.zip包下载:[ZIP]xutils主要分以下几个模块 视图绑定模块 网络请求模块 数据库模块 图片加载模块 我们 ...

  10. Android 监控网络状态

    public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (Conn ...

随机推荐

  1. mybatis SQL in() 为什么要在 mapper.xml里 用 foreach

    结论: 若存在 in () 语句,要使用 #{} 预编译入参的方式,需要在 mapper.xml里 使用 foreach ======================================= ...

  2. Power BI 12 DAY

    电商平台流量分析 案例练习 参数建模 建模-->新建参数 新建度量值使用SWITCH函数将需要的指标数据化 15.关键指标 = switch([指标选择 值],1,[1.访客数合计],2,[2. ...

  3. 未配置Datasource时, 启动 SpringBoot 程序报错的问题

    SpringBoot will show error if there is no datasource configuration in application.yml/application.pr ...

  4. 基于keras的胶囊网络(CapsNet)

    1 简介 胶囊网络(CapsNet)由 Hinton 于2017年10月在<Dynamic Routing Between Capsules>中提出,目的在于解决 CNN 只能提取特征,而 ...

  5. 微信小程序实现原理

    微信小程序实现原理 微信小程序采用wxml.wxss.javascript进行开发,本质是一个单页应用,所有的页面渲染和事件处理,都在一个页面内进行,但又可以通过微信客户端调用原生的各种接口.微信的架 ...

  6. spring boot实现验证码登录

    内容比较简单,需要完整项目的朋友留下邮箱,给你们发. 直接看效果: 下面是实现步骤 1.验证码生成工具类(引用自网络) package com.laoxu.test.helloweb.util; im ...

  7. Spring Boot整合JWT实现接口访问认证

    最近项目组需要对外开发相关API接口,需要对外系统进行授权认证.实现流程是先给第三方系统分配appId和appSecret,第三方系统调用我getToken接口获取token,然后将token填入Au ...

  8. Jetpack Compose(2) —— 入门实践

    一.项目中使用 Jetpack Compose 从此节开始,为方便起见,如无特殊说明,Compose 均指代 Jetpack Compose. 开发工具: Android Studio 1.1 创建支 ...

  9. 【MongoDB】MongoDB原理分析、集群搭建(Docker)与简单使用

    一.MongoDB 简介 MongoDB是一个基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间,是非关系数据库当中功能最丰富,最像关系数据库的.其目的是为WEB应用提供可扩展的高性能数据存 ...

  10. Lua调试函数 debug.getinfo() namewhat详解

    Lua调试的时候会用到debug.getinfo()函数,what的值文档给了解释: "Lua" : Lua function "C" : C function ...