2021-11-29 AndroidR WiFi可以上网,但是Settings里提示“No Internet”的问题的一个解决方法,通过ping一个网站确认网络的情况。java ping 网络的代码。

news/2024/5/11 18:18:17/文章来源:https://blog.csdn.net/qq_37858386/article/details/121609642

一、AndroidR WiFi可以上网,但是Settings里面提示“No Internet”。然后用设备的wifi连接到手机打开的热点不会有这样的提示。通过一翻折腾和了解现在android 增加一项检测网络性能的类NetworkCapabilities,通过这个类可以判断出网络的性能,但是默认是连接到Google的服务器,所以你懂的。

 二、NetworkCapabilities 类 frameworks\base\core\java\android\net\NetworkCapabilities.java

三、解决这个问题比较理想的方法是自己修改默认的网络服务器为国内的,但是找几天都找不到修改点,只能暂时放弃。但是问题又不能不解决,怎么办呢?那就用ping 国内ip的方法了吧。

四、通过Ping IP确认网络是否正常的步骤:

   1、ping ip的java代码,通过waitFor()可以知道是否连接成功,成功返回0,失败为其他的值。实际上测试发现,刚刚连接wifi的时候,ping返回的是空的,waitFor()返回是2,等过几秒后才返回0,所有我这里把返回2也当成连接成功了。

private boolean CheckInternet(){String result = null;try {String ip = "www.baidu.com";Log.d(TAG, "Begin to check internet!");Runtime runtime = Runtime.getRuntime();java.lang.Process proc = runtime.exec("ping -c 3 -w 3 " + ip);//java.lang.Process proc = runtime.exec("ping -c 3 -w 3  www.google.com");InputStream input = proc.getInputStream();BufferedReader in = new BufferedReader(new InputStreamReader(input));StringBuffer stringBuffer = new StringBuffer();String content = "";while ((content = in.readLine()) != null) {stringBuffer.append(content+"\n");}Log.d(TAG, "result content : " + stringBuffer.toString());int status = proc.waitFor();Log.d(TAG, "Net Status:" + status);if(status == 0 || status == 2){result = "success";return true;}else {result = "failed";}} catch (IOException e) {result = "IOException";} catch (InterruptedException e) {result = "InterruptedException";} finally {Log.d(TAG, "result = " + result);}return false;}

   2、那在哪里进行ping ip呢?多次折腾后发现在vendor\mediatek\proprietary\frameworks\opt\net\services\core\java\com\android\server\MtkConnectivityService.java  service里面添加比较合适,因为ping的过程会耗时,在其他地方ping会造成界面操作迟钝的情况。从下面的代码可以知道,如果是目前网络是不可以的状态下会通过ping ip再次确认。这么搞的如果在国外可以连接google的状态下就不会走这个路线。

    3、看卡addCapability的代码frameworks\base\core\java\android\net\NetworkCapabilities.java

     4、那最后看看settings里面如何读这个标识显示是否网络ok吧。         frameworks\opt\net\wifi\libs\WifiTrackerLib\src\com\android\wifitrackerlib\StandardWifiEntry.java

frameworks\opt\net\wifi\libs\WifiTrackerLib\src\com\android\wifitrackerlib\Utils.java

 

 

      6、到这里功能是已经实现了,看看实际运行后的log吧。

       7、贴一下整个测试的修改点。

          frameworks/base/core/java/android/net/NetworkCapabilities.java和
  vendor/mediatek/proprietary/frameworks/opt/net/services/core/java/com/android/server/MtkConnectivityService.java

diff --git a/frameworks/base/core/java/android/net/NetworkCapabilities.java b/frameworks/base/core/java/android/net/NetworkCapabilities.java
old mode 100644
new mode 100755
index 6f61933..ecf72df
--- a/frameworks/base/core/java/android/net/NetworkCapabilities.java
+++ b/frameworks/base/core/java/android/net/NetworkCapabilities.java
@@ -45,6 +45,7 @@ import java.util.Arrays;import java.util.Objects;import java.util.Set;import java.util.StringJoiner;
+import android.util.Log;/*** Representation of the capabilities of an active network. Instances are
@@ -467,6 +468,12 @@ public final class NetworkCapabilities implements Parcelable {// then the capability will also be removed from the list of unwanted capabilities.// TODO: Consider adding unwanted capabilities to the public API and mention this// in the documentation.
+        Log.d("hulde", "capability "+capability);
+        if(capability == NET_CAPABILITY_VALIDATED)
+		{
+		   Log.d("hulde", " capability is NET_CAPABILITY_VALIDATED ");
+		   //return this;
+        }checkValidCapability(capability);mNetworkCapabilities |= 1 << capability;mUnwantedNetworkCapabilities &= ~(1 << capability);  // remove from unwanted capability list
@@ -516,6 +523,7 @@ public final class NetworkCapabilities implements Parcelable {*/public @NonNull NetworkCapabilities setCapability(@NetCapability int capability,boolean value) {
+        Log.d("hulde", "setCapability "+capability);if (value) {addCapability(capability);} else {
@@ -575,6 +583,7 @@ public final class NetworkCapabilities implements Parcelable {* @return {@code true} if set on this instance.*/public boolean hasCapability(@NetCapability int capability) {
+        Log.d("hulde", "mNetworkCapabilities= " + mNetworkCapabilities);return isValidCapability(capability)&& ((mNetworkCapabilities & (1 << capability)) != 0);}
diff --git a/vendor/mediatek/proprietary/frameworks/opt/net/services/core/java/com/android/server/MtkConnectivityService.java b/vendor/mediatek/proprietary/frameworks/opt/net/services/core/java/com/android/server/MtkConnectivityService.java
old mode 100644
new mode 100755
index 5eea14c..e492354
--- a/vendor/mediatek/proprietary/frameworks/opt/net/services/core/java/com/android/server/MtkConnectivityService.java
+++ b/vendor/mediatek/proprietary/frameworks/opt/net/services/core/java/com/android/server/MtkConnectivityService.java
@@ -258,6 +258,12 @@ import java.util.TreeSet;import java.util.concurrent.atomic.AtomicInteger;import android.provider.DeviceConfig;+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+
+
+/*** @hide*/
@@ -2974,6 +2980,9 @@ public class MtkConnectivityService extends ConnectivityService {: "";log(nai.toShortString() + " validation " + (valid ? "passed" : "failed") + logMsg);}
+
+			Slog.e("hulde", "handleNetworkTested 1122 valid="+valid);
+			//valid = true;if (valid != nai.lastValidated) {if (wasDefault) {mDeps.getMetricsLogger()
@@ -3095,6 +3104,7 @@ public class MtkConnectivityService extends ConnectivityService {EVENT_NETWORK_TESTED,new NetworkTestedResults(mNetId, p.result, p.timestampMillis, p.redirectUrl));
+			Slog.e("hulde", "mTrackerHandler.sendMessage  1555552");mTrackerHandler.sendMessage(msg);// Invoke ConnectivityReport generation for this Network test event.
@@ -3115,6 +3125,7 @@ public class MtkConnectivityService extends ConnectivityService {@Overridepublic void notifyPrivateDnsConfigResolved(PrivateDnsConfigParcel config) {
+        Slog.e("hulde", "mTrackerHandler.sendMessage  155111");mTrackerHandler.sendMessage(mTrackerHandler.obtainMessage(EVENT_PRIVATE_DNS_CONFIG_RESOLVED,0, mNetId, PrivateDnsConfig.fromParcel(config)));
@@ -3129,6 +3140,7 @@ public class MtkConnectivityService extends ConnectivityService {@Overridepublic void notifyCaptivePortalDataChanged(CaptivePortalData data) {
+        Slog.e("hulde", "mTrackerHandler.sendMessage  12551200");mTrackerHandler.sendMessage(mTrackerHandler.obtainMessage(EVENT_CAPPORT_DATA_CHANGED,0, mNetId, data));
@@ -3151,6 +3163,7 @@ public class MtkConnectivityService extends ConnectivityService {} finally {Binder.restoreCallingIdentity(token);}
+			Slog.e("hulde", "mTrackerHandler.sendMessage  85981012");mTrackerHandler.sendMessage(mTrackerHandler.obtainMessage(EVENT_PROVISIONING_NOTIFICATION, PROVISIONING_NOTIFICATION_SHOW,mNetId, pendingIntent));
@@ -3158,6 +3171,7 @@ public class MtkConnectivityService extends ConnectivityService {@Overridepublic void hideProvisioningNotification() {
+        Slog.e("hulde", "mTrackerHandler.sendMessage  02052655251");mTrackerHandler.sendMessage(mTrackerHandler.obtainMessage(EVENT_PROVISIONING_NOTIFICATION, PROVISIONING_NOTIFICATION_HIDE, mNetId));}
@@ -4117,7 +4131,8 @@ public class MtkConnectivityService extends ConnectivityService {if (nai.partialConnectivity) {showNetworkNotification(nai, NotificationType.PARTIAL_CONNECTIVITY);} else {
-            showNetworkNotification(nai, NotificationType.NO_INTERNET);
+            //showNetworkNotification(nai, NotificationType.NO_INTERNET);
+            	Slog.e("hulde", "showNetworkNotification NO_INTERNET");}}@@ -5996,6 +6011,7 @@ public class MtkConnectivityService extends ConnectivityService {this, mNetd, mDnsResolver, mNMS, providerId, Binder.getCallingUid());// Make sure the LinkProperties and NetworkCapabilities reflect what the agent info says.
+        Slog.e("hulde", "MtkConnectivityService registerNetworkAgent  56552225");nai.getAndSetNetworkCapabilities(mixInCapabilities(nai, nc));processLinkPropertiesFromAgent(nai, nai.linkProperties);@@ -6352,6 +6368,40 @@ public class MtkConnectivityService extends ConnectivityService {* maintained here that the NetworkAgent is not aware of (e.g., validated, captive portal,* and foreground status).*/
+     
+	private boolean CheckInternet(){
+		  String result = null;
+		  try {
+				  String ip = "www.baidu.com";
+				  Log.d(TAG, "Begin to check internet!");
+				  Runtime runtime = Runtime.getRuntime();
+                  java.lang.Process proc = runtime.exec("ping -c 3 -w 3 " + ip);
+				  //java.lang.Process proc = runtime.exec("ping -c 3 -w 3  www.google.com");
+				  InputStream input = proc.getInputStream();
+				  BufferedReader in = new BufferedReader(new InputStreamReader(input));
+				  StringBuffer stringBuffer = new StringBuffer();
+				  String content = "";
+				  while ((content = in.readLine()) != null) {
+						  stringBuffer.append(content+"\n");
+				  }
+				  Log.d(TAG, "result content : " + stringBuffer.toString());
+				  int status = proc.waitFor();
+				  Log.d(TAG, "Net Status:" + status);
+				  if(status == 0 || status == 2){
+					   result = "success";
+					   return true;
+				  }else {
+					   result = "failed";
+				 }
+		  } catch (IOException e) {
+				  result = "IOException";
+		  } catch (InterruptedException e) {
+				  result = "InterruptedException";
+		 } finally {
+				  Log.d(TAG, "result = " + result);
+		  }
+		  return false;
+	  }private NetworkCapabilities mixInCapabilities(NetworkAgentInfo nai, NetworkCapabilities nc) {// Once a NetworkAgent is connected, complain if some immutable capabilities are removed.// Don't complain for VPNs since they're not driven by requests and there is no risk of
@@ -6371,13 +6421,17 @@ public class MtkConnectivityService extends ConnectivityService {/// @}}}
+		Slog.e("hulde", "MtkConnectivityService mixInCapabilities 22525");// Don't modify caller's NetworkCapabilities.NetworkCapabilities newNc = new NetworkCapabilities(nc);if (nai.lastValidated) {newNc.addCapability(NET_CAPABILITY_VALIDATED);} else {
-            newNc.removeCapability(NET_CAPABILITY_VALIDATED);
+			 if(CheckInternet())
+                 newNc.addCapability(NET_CAPABILITY_VALIDATED);
+			 else
+			  	newNc.removeCapability(NET_CAPABILITY_VALIDATED);}if (nai.lastCaptivePortalDetected) {newNc.addCapability(NET_CAPABILITY_CAPTIVE_PORTAL);
@@ -6423,6 +6477,7 @@ public class MtkConnectivityService extends ConnectivityService {*/private void updateCapabilities(final int oldScore, @NonNull final NetworkAgentInfo nai,@NonNull final NetworkCapabilities nc) {
+        Slog.e("hulde", "MtkConnectivityService updateCapabilities  02152555212");NetworkCapabilities newNc = mixInCapabilities(nai, nc);if (Objects.equals(nai.networkCapabilities, newNc)) return;updateNetworkPermissions(nai, newNc);
@@ -7106,6 +7161,7 @@ public class MtkConnectivityService extends ConnectivityService {* @param nai The network that changed background states*/private void applyBackgroundChangeForRematch(@NonNull final NetworkAgentInfo nai) {
+    Slog.e("hulde", "MtkConnectivityService applyBackgroundChangeForRematch  1222255");final NetworkCapabilities newNc = mixInCapabilities(nai, nai.networkCapabilities);if (Objects.equals(nai.networkCapabilities, newNc)) return;updateNetworkPermissions(nai, newNc);

五、参考文章

Android Runtime.getRuntime().exec - 行走的思想 - 博客园

Android中的ping网络实现_我想要台时光机-CSDN博客

Android 9 网络配置_dk_work的博客-CSDN博客

Android wifi提示已连接但是无法访问网络_KisKis_8808的博客-CSDN博客

Android O 可以上网 提示无法访问网络_weixin_34291004的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_728336.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2021-12-07 AndroidR(11) 连接WIFI可以上网,但是提示“No Internet”,增加一个国内可以访问的http_urls网站就可以解决问题

一、目前Android引入的网络评估机制&#xff0c;当你连上网络后&#xff0c;会给目标产生204响应的服务器发送给一个请求&#xff0c;如果服务器返回的是状态码为204的响应&#xff0c;那么就被认为网络可以访问&#xff1b;否则&#xff0c;如返回的是其他状态码&#xff0c;那…

2021-10-17 Android系统源码在线查看网站 http://androidxref.com/

一、 Android系统源码在线查看网站 http://androidxref.com/ 二、网站预览

​2021-12-27 C、C++ java代码在线运行​网站

一、介绍两个C、C java代码在线运行​网站&#xff0c;有时候那里测试挺方便的&#xff0c;这个好的东西我以前就怎么不知道&#xff0c;哎。 1、代码编辑器_www.cjavapy.com 2、代码在线运行 - 在线工具 3、在线运行Java 二、运行效果图

python怎么访问网站_python如何进入交互模式

安装完Python&#xff0c;在命令行输入“python”之后&#xff0c;如果成功&#xff0c;会得到类似于下面的窗口&#xff1a;可以看到&#xff0c;结尾有3个>符号&#xff08;>>>&#xff09;。>>>被叫做Python命令提示符&#xff08;prompt&#xff09;&…

tbopen链接生成工具_运营网站,自动刷外链工具真的有用吗?

很多急于求成的新手站长会忍不住试一试&#xff0c;那么这些工具真的有用吗&#xff0c;我本着实践出真知的的态度&#xff0c;用了几个网站去做实验&#xff0c;经过实际操作&#xff0c;在此建议各位站长慎用这种软件&#xff0c;一般效果会适得其反。自动刷外链工具真的有用…

一个网站对应一个服务器,有一个云服务器可以对应多少个网站

有一个云服务器可以对应多少个网站 内容精选换一换内网域名解析是基于VPC网络的域名解析过程&#xff0c;通过华为云内网DNS把域名(如ecs.com)转换成私网IP地址(192.168.1.1)。内网域名解析实现云服务器在VPC内直接通过内网域名互相访问。同时&#xff0c;还支持不经公网&#…

php抓取网站的数据库,jquery+thinkphp实现跨域抓取数据的方法

本文实例讲述了jquerythinkphp实现跨域抓取数据的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;今天做一个远程抓取数据的功能&#xff0c;记得jquery可以用Ajax远程抓取&#xff0c;但不能跨域。再网上找了很多。但我觉得还是来个综合的&#xff0c;所以我现在…

Django管理网站

Django管理网站 为应用程序定义模型时&#xff0c;Django提供的管理网站让你能够轻松的处理模型。网站管理员可使用管理网站&#xff0c;但普通用户不能使用。 1.创建超级用户 创建超级用户&#xff0c;用户名可以自己起&#xff0c;不一定要ll_admin。 下面的电子邮件地址也可…

【论文泛读130】SEOVER:基于句子级情感取向向量的会话情感识别模型

贴一下汇总贴&#xff1a;论文阅读记录 论文链接&#xff1a;《SEOVER: Sentence-level Emotion Orientation Vector based Conversation Emotion Recognition Model》 一、摘要 对于会话情感识别的任务&#xff0c;最近的工作侧重于说话人关系建模&#xff0c;但忽略了话语…

jsp: 使用application对象实现网站计数器

任务要求: 在一些站点中&#xff0c;经常会看到网站计数器的功能。要点&#xff1a; 网站的来访人数可能会很多&#xff0c;有可能超过20位整数&#xff0c;大整数类BigInteger 使用application范围的属性保存计数。 用户每次在第一次访问时才需要进行计数的操作&#xff0c;而…

LAMP网站架构方案分析

LAMP&#xff08;Linux-Apache-MySQL-PHP&#xff09;网站架构是目前国际流行的Web框架&#xff0c;该框架包括&#xff1a;Linux操作系统&#xff0c;Apache网络服务器&#xff0c;MySQL数据库&#xff0c;Perl、PHP或者Python编程语言&#xff0c;所有组成产品均是开源软件&a…

错误:网站辅助进程已被 IIS 终止(Debug 时是不是弹出)

调试器已停止对网站执行代码。这导致 Internet 信息服务 (IIS) 认为辅助进程已停止响应。因此&#xff0c;ISS 终止了辅助进程。若要继续调试&#xff0c;必须配置 IIS 以使辅助进程继续运行。 启用“终端服务” 打开“管理工具”窗口。 单击“开始”&#xff0c;然后选择“控…

.net网站能走多远

刚写好了学校网站&#xff0c;请大家帮忙测试一下。不知道怎么sql注入&#xff0c;或者DDoS攻击&#xff0c;我也是大四什么都是摸索阶段&#xff0c;不过这个网站 做了好长时间了&#xff0c;现在终于可以上架了&#xff0c;希望大家能指点一二&#xff0c;谢谢&#xff01; 地…

网站运维之道 监控与报警机制

接上一篇的《关于可用性》&#xff0c;再谈一下监控与报警机制。 监控机制 定义了网站可用性指标&#xff0c;如何获取网站的可用值? 监控工具该粉墨登场了。 多数网站都会倾向于利用开源软件自行搭建监控平台。笔者一向认为&#xff0c;即使网站有一台服务器&#xff0c;也应…

SEO是什么意思?

搜索引擎优化&#xff08;SEO&#xff09;简单理解&#xff1a;它是网络推广的一种形式&#xff0c;简单来说就是通过seo优化&#xff0c;调整网站内部与网站外部的结构&#xff0c;使得自己的网站能够与搜索引擎更加友好&#xff0c;从而提升网站目标关键词在搜索引擎上的排名…

iis7.0上发布mvc4.0网站

步骤如下&#xff1a; 1.右击需要发布的项目&#xff0c;在弹出的菜单中选择“发布...”选项 2.在“发布web”对话框中进行设置&#xff0c;配置文件名称默认为“配置文件1”可以修改为需要的名字&#xff0c;以便识别&#xff0c;也可以不改。发布方法选择“文件系统”&#x…

会员直推奖php程序_网站程序的介绍

在搭建网站时&#xff0c;尽量选择自己熟悉的&#xff0c;使用过的程序去搭建网站&#xff0c;如果是自己不熟悉的程序&#xff0c;那就非常的麻烦&#xff0c;要从头开始试研究&#xff0c;就需要花费大量的时间&#xff0c;花精力&#xff0c;如果自己是程序员出身&#xff0…

Asp.net mvc 网站之速度优化 -- 页面缓存

网站速度优化的一般方法由于网站最重要的用户体验就是速度&#xff0c;特别是对于电子商务网站而言。一般网站速度优化会涉及到几个方面:1. 数据库优化 — 查询字段简历索引&#xff0c;使用数据库连接池和持久化&#xff0c;现在还有种趋势&#xff0c;就是选择使用No SQL作为…

JSP网站开发基础总结《十一》

继上一篇关于过滤器连总结后&#xff0c;本篇为大家详细介绍一下过滤器中过滤规则的dispatcher属性的使用&#xff0c;在servlet2.5中dispatcher的属性有四种&#xff0c;其中上一篇已经为大家介绍了error属性的使用&#xff0c;本篇将详细介绍一下剩余的三个属性的作用。 1、s…

触摸屏网站开发系列(一)-ios web App应用程序(ios meta)

<meta name"viewport" content"widthdevice-width, initial-scale1" /> pingmu触摸屏网站的开发其实现在来讲比前几年移动端网站开发好多了&#xff0c;触摸屏设备IOS、Android、BBOS6等系统自带浏览器均为WEBKIT核心&#xff0c;这就说明PC上面尚未…