使用ConnectivityManager.bindProcessToNetwork绑定特殊网络

最近测试那边提了一个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绑定特殊网络的更多相关文章
- android ConnectivityManager 检查是否有网络
一. ConnectivityManager 概要 ConnectivityManager是网络连接相关的管理器,它主要用于查询网络状态并在网络发生改变时发出状态变化通知.这个类主要负责的下列四个 ...
- IP-MAC绑定导致网络故障
前段时间将一台服务器A的服务迁移至了另外一台服务器B,外网IP地址也顺带迁移过来了,结果网络出现了问题. 其中内网是畅通的,但是外网IP怎么都连不上另外一台路由C(B和C是在一个交换机下的,网段也相同 ...
- 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 ...
- 6、android 网络编程
1.基于socket的用法 服务器端: 先启动一个服务器端的socket ServerSocket svr = new ServerSocket(8989); 开始侦听请求 Socket s ...
- Android网络连接判断与处理
博客分类: Android 获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android ...
- android 检查网络连接状态实现步骤
获取网络信息需要在AndroidManifest.xml文件中加入相应的权限. <uses-permission android:name="android.permission.AC ...
- android ping网络是否成功
public static boolean pingHost(String str) { //str 为要ping的IP地址 boolean result = false; try { Process ...
- Android 判断wifi和4G网络是否开启
public boolean isWifiAvailable() { ConnectivityManager connectivityManager = (ConnectivityManager) g ...
- xUtils3源码分析(一):view的绑定
概述 xUtils3是国人开发的一款功能丰富的Android快速开发框架,值得研究下.zip包下载:[ZIP]xutils主要分以下几个模块 视图绑定模块 网络请求模块 数据库模块 图片加载模块 我们 ...
- Android 监控网络状态
public static boolean isNetworkAvailable(Context context) { ConnectivityManager connectivity = (Conn ...
随机推荐
- MarkDown书写语法(常用格式)
实际上每个 Markdown 应用程序都实现了稍有不同的 Markdown 语法,熟悉MarkDown书写语法常用格式,满足日常文字编辑需求 1.标题 请在单词或短语前面添加井号 (#) .# 的数量 ...
- 高精度模板 大数加大数,可变数组vector实现
vector<int> Add(vector<int>& A, vector<int>& B)//采用引用传入vector,避免将其全部复制传值,使 ...
- 如何计算DG环境下Redo传输所需的带宽?
MOS有篇文章: How To Calculate The Required Network Bandwidth Transfer Of Redo In Data Guard Environments ...
- CentOS7.5上Oracle19c离线rpm安装
CentOS7.5上Oracle19c离线rpm安装 一.基础环境配置及依赖安装(1)关闭系统防火墙(如外网环境不能关闭防火墙自行开放相关需要使用的端口即可) systemctl stop firew ...
- scrapy框架使用:分布式、增量式
scrapy框架的使用 前记:爬虫框架部分整理完成,后续慢慢完善, 声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 创建工程: scrapy startproje ...
- CF1795
A 先判断初始行不行,再模拟加入. B 题意:数轴上给定一些线段,和点 \(t\).问能否删去一些线段,使得 \(t\) 变成唯一的覆盖次数最多的点. 差分 + 贪心. C 有 \(n\) 杯水,\( ...
- 【Unity3D】协同程序
1 简介 1)协程概念 协同程序(Coroutine)简称协程,是伴随主线程一起运行的程序片段,是一个能够暂停执行的函数,用于解决程序并行问题.协程是 C# 中的概念,由于 Unity3D 的 ...
- 我在winform项目里使用“Windows I/O完成端口”的经验分享
少年!看你骨骼惊奇,是万中无一的练武奇才,我这儿有本武林秘籍,见与你有缘就送你了! 如来神掌 Windows I/O完成端口是一个我至今都说不好的话题,请宽容的接受我这不是科班出身的自学成才的野生程序 ...
- win32-GetActiveWindow和GetForegroundWindow
最近被这两个api搞得有点晕,故查阅了相关的资料. 这篇文章解释的很好:https://devblogs.microsoft.com/oldnewthing/20081006-00/?p=20643 ...
- 搜索引擎RAG召回效果评测MTEB介绍与使用入门
RAG 评测数据集建设尚处于初期阶段,缺乏针对特定领域和场景的专业数据集.市面上常见的 MS-Marco 和 BEIR 数据集覆盖范围有限,且在实际使用场景中效果可能与评测表现不符.目前最权威的检索榜 ...