NetworkInfo 无法正确响应运行 Nougat 的手机上的网络更改

2023-12-23

前言:这在运行 6.0.1 的手机上运行得很好。但在我运行 7.1.1 的手机上,却不是这样,如下所示。

build.gradle(模块:应用程序)

compileSdkVersion 25
buildToolsVersion "25.0.0"
applicationId "com.gesslar.threshvote"
minSdkVersion 19
targetSdkVersion 25

AndroidManifest.xml

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

    <receiver
        android:name=".NetworkChangeReceiver"
        android:enabled="true"
        android:exported="true">
        <intent-filter>
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/>
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
        </intent-filter>
    </receiver>

NetworkUtil.java我有一个 BroadcastReceiver,用来简单地调用 NetworkUtil.updateNetworkStatus(context);

public static void updateNetworkStatus(Context context) {
    final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    final NetworkInfo activeNetwork = connectivityManager.getActiveNetworkInfo();
    if (activeNetwork == null) {
        Log.d(TAG, "NO CONNECTION INFORMATION");
        return;
    }
    if (activeNetwork.isConnected()) {
        Log.d(TAG, "WE ARE CONNECTED TO A NETWORK");
    } else {
        Log.d(TAG, "WE ARE NOT CONNECTED TO A NETWORK");
        return;
    }
    Log.d(TAG, "NETWORK TYPE: " + activeNetwork.getTypeName());
}

从 WiFi 和数据连接开始我做了以下测试 关闭 WiFi

03-08 20:15:04.664 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION

打开 WiFi:

03-08 20:15:26.333 29796-29796/com.gesslar.threshvote D/NetworkUtil: WE ARE CONNECTED TO A NETWORK
03-08 20:15:26.333 29796-29796/com.gesslar.threshvote D/NetworkUtil: NETWORK TYPE: MOBILE

关闭数据:

No log line written

打开数据:

No log line written

关闭 WiFi,然后关闭数据:

1) 03-08 20:17:13.029 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION
2) No log line written

两者均关闭后,打开 WiFi:

03-08 20:18:00.198 29796-29796/com.gesslar.threshvote D/NetworkUtil: NO CONNECTION INFORMATION
^ showed as soon as it started seeking for WiFi, but no further log line was written when WiFi became active.

我对结果感到非常困惑。我在其他地方看到我应该在运行时绑定它,但是,我唯一的活动是首选项活动。该应用程序并不打算具有运行时 UI,而是使用后台 IntentService 和通知。


根据安卓文档 https://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html,

面向 Android 7.0(API 级别 24)及更高版本的应用不会收到 CONNECTIVITY_ACTION 如果声明了广播接收器则进行广播 在他们的清单中。应用仍会收到 CONNECTIVITY_ACTION 如果他们注册了 BroadcastReceiver 则广播 Context.registerReceiver() 并且该上下文仍然有效。

所以你需要做的是开始一个Service,创建广播接收器的新实例NetworkChangeReceiver并注册以收听android.net.conn.CONNECTIVITY_CHANGE通过使用

registerReceiver(new NetworkChangeReceiver(), new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE"))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NetworkInfo 无法正确响应运行 Nougat 的手机上的网络更改 的相关文章

随机推荐

  • 核心情节自定义主题?

    我在 iPhone 应用程序中使用 Core Plot 绘制趋势图 但尚未找到如何自定义背景 我可以使用内置主题创建主题 例如 kCPPlainWhiteTheme 但如何更改它们 或者创建一个新的 我基本上需要做的就是使背景透明 编辑 更
  • 使用参数调用 JSON Web 服务 - Objective C - iOS

    我正在尝试使用 Objective c 中的参数调用一个简单的 JSON Web 服务 到目前为止还不起作用 这是网络服务方法 WebMethod ScriptMethod ResponseFormat ResponseFormat Jso
  • 这个 Xcode 警告是什么意思? “应用程序可执行文件缺少所需的架构。...”

    当我在 Xcode 4 2 中为我的第 4 代 iPod touch 第一个配备视网膜显示屏的产品 构建并运行 iOS 5 应用程序时 我收到以下警告 警告 iPhone iPod Touch 应用程序可执行文件缺少 所需的架构 至少以下架
  • 通用语法符号 <~> [重复]

    这个问题在这里已经有答案了 使用 NetBeans 或 IDEA 等 IDE 时 我发现它们正在将泛型类型转换为以下符号 private final List
  • 将 Kivy 与 Python 3.4 结合使用

    我已经在我的 Mac 上安装了 Kivy OS X 预装了 Python 2 7 我想使用Python 3的枚举功能 所以我安装了Python 3 4 经过多次搜索和梳理头发后 有人向我指出了这条线 exec python c import
  • 在 Kubernetes 中找不到带有 OAuth2 身份验证的 Nginx Ingress 404 页面

    继上一个关于 Stack Overflow 的问题之后link https stackoverflow com questions 64590283 external oauth authentication with nginx in k
  • 安装过程中从互联网下载数据的包

    有谁知道有一个包在安装过程中从互联网下载数据集 然后准备并保存它 以便在使用加载包时可用library packageName 这种方法是否有任何缺点 除了明显的缺点 如果数据源不可用或数据格式已更改 包安装将失败 EDIT 一些背景 这些
  • 为 qsort 的结构编写比较函数?

    我在编写比较函数时遇到问题qsortC 中的函数 这是我目前拥有的 int cmpfunc const void a const void b return Individual a gt fitness Individual b gt f
  • C++ 中高性能顺序文件 I/O 的最快方法是什么?

    假设以下情况 Output 文件已打开 数据 流 到磁盘 内存中的数据位于一个大的连续缓冲区中 它以原始形式直接从该缓冲区写入磁盘 缓冲区的大小是可配置的 但在流的持续时间内是固定的 缓冲区被一个接一个地写入文件 不进行寻道操作 文件已关闭
  • 选择框:在 IE 上,项目将添加到 OptGroup 而不是根。好的

    我的行为有点奇怪Select盒子和OptGroup I use OptGroup并尝试在最后添加一个我希望不在其中的项目OptGroup FF 按预期执行 但 IE 将其添加到OptGroup 使用此代码 fiddle http jsfid
  • 错误:EACCES:权限被拒绝,使用 npm 安装时 mkdir

    每次我尝试使用 npm 在本例中为 electro packager 安装某些东西时 我都会遇到此错误 我该如何解决这个问题 我已经尝试通过 chmod 更改 npm 的权限来授予我访问权限 但它不起作用 我还尝试使用另一个节点版本 通过
  • 具有搜索功能的 Android 列表视图

    我的动态列表视图 从网络服务填充 有一个 AutoCompleteTextView 搜索 按钮 我已经为 AutoCompleteTextView 实现了自动完成功能 它工作正常 当我输入 min 2chars 时 AutoComplete
  • C++ 将成员函数传递给另一个类

    我正在尝试在 C 中进行简单的回调 但在按照我的意愿进行操作时遇到问题 本质上我想要这样的东西 class A void A AddCallback void callBackFunction string Code goes here 还
  • 在 Flask 中将数组处理为表单名称

    如果我发送这样的表格
  • 如何优化 Haskell 中的数值积分性能(举例)

    如何优化数值积分例程 与 C 相比 目前已经做了什么 我用未装箱的向量替换了列表 显而易见 我应用了 Read World Haskell 一书中描述的分析技术http book realworldhaskell org read prof
  • 仅输入数字 C 编程

    目前我正在编写一个程序来获取用户的输入 0 到 50 如果数量超出范围 则该数量将不被计算在内 之后 我将计算并得到这些的平均值 最大值和最小值 输入 当用户输入字符时我遇到问题 程序就会破解 我想知道如何解决这个问题 提前致谢 inclu
  • 在 ZSH 中使用陷阱退出 shell 脚本的正确方法?

    我无法在不退出 shell 的情况下使 Zshell 脚本中的陷阱函数正常工作 我有一个简单的倒数计时器 我希望能够使用 C 中断它 当我这样做时 我希望陷阱更改终端中的光标状态 我的语法是 bin zsh trap tput cnorm
  • C/C++程序的内存布局是怎样的?

    我知道有堆栈 堆 代码和数据等部分 堆栈 堆它们是否使用相同的内存部分 因为它们可以独立增长 这段代码是什么 当我有一个函数时 它是堆栈的一部分还是代码部分 另外这个初始化 未初始化的数据段是什么 是否有可用的只读内存部分 当我有一个 co
  • 无法将 jsonwebtoken 与最新版本的 React 一起使用

    TL DR 替换jsonwebtoken with jwt decode 我在将现有的 React 应用程序升级到最新版本时遇到了一些麻烦 每次我都会收到以下错误 Can t resolve buffer in home user proj
  • NetworkInfo 无法正确响应运行 Nougat 的手机上的网络更改

    前言 这在运行 6 0 1 的手机上运行得很好 但在我运行 7 1 1 的手机上 却不是这样 如下所示 build gradle 模块 应用程序 compileSdkVersion 25 buildToolsVersion 25 0 0 a