广播接收器未调用互联网连接检查

2024-04-26

我正在尝试制作一个简单的应用程序,它会在互联网连接发生变化时通知是否有可用的互联网连接。我在互联网上找到了一些解决方案并尝试实施它们,但不知何故它不起作用。我在清单文件中注册的广播接收器没有调用网络连接更改。

Manifest

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name=".MainActivity">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>

    <receiver
        android:name=".NetworkStateChangeReceiver">
        <intent-filter >
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>

</application>

广播接收器

package com.gdm.internetconnectivitycheck;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v4.content.LocalBroadcastManager;
import android.util.Log;

import static android.content.Context.CONNECTIVITY_SERVICE;

public class NetworkStateChangeReceiver extends BroadcastReceiver {

public static final String NETWORK_AVAILABLE_ACTION = "com.gdm.retailalfageek.NetworkAvailable";
public static final String IS_NETWORK_AVAILABLE = "isNetworkAvailable";

@Override
public void onReceive(Context context, Intent intent) {
    Intent networkStateIntent = new Intent(NETWORK_AVAILABLE_ACTION);
    networkStateIntent.putExtra(IS_NETWORK_AVAILABLE,  isConnectedToInternet(context));
    LocalBroadcastManager.getInstance(context).sendBroadcast(networkStateIntent);
    Log.e("Network Available ", "On receive called");
}

private boolean isConnectedToInternet(Context context) {
    try {
        if (context != null) {
            ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            return networkInfo != null && networkInfo.isConnected();
        }
        return false;
    } catch (Exception e) {
        Log.e(NetworkStateChangeReceiver.class.getName(), e.getMessage());
        return false;
    }
}
}

主要活动

package com.gdm.internetconnectivitycheck;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v4.content.LocalBroadcastManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.design.widget.Snackbar;

import static com.gdm.internetconnectivitycheck.NetworkStateChangeReceiver.IS_NETWORK_AVAILABLE;

public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    IntentFilter intentFilter = new IntentFilter(NetworkStateChangeReceiver.NETWORK_AVAILABLE_ACTION);
    LocalBroadcastManager.getInstance(this).registerReceiver(new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            boolean isNetworkAvailable = intent.getBooleanExtra(IS_NETWORK_AVAILABLE, false);
            String networkStatus = isNetworkAvailable ? "connected" : "disconnected";

            Snackbar.make(findViewById(R.id.main_activity), "Network Status: " + networkStatus, Snackbar.LENGTH_LONG).show();

        }
    }, intentFilter);


}
}

针对 Android 7.0(API 级别 24)及更高版本的应用程序必须注册 以下广播

registerReceiver(BroadcastReceiver,IntentFilter)

在清单中声明接收者不起作用。

连接性_操作

从 Android 8.0(API 级别 26)开始, 系统对清单声明的接收者施加了额外的限制。 如果您的应用程序以 API 级别 26 或更高级别为目标,则无法使用 清单以声明大多数隐式广播的接收者 (不专门针对您的应用程序的广播)。你仍然可以 当用户主动使用您的服务时,使用上下文注册的接收器 应用程序。

直接来自官方doc https://developer.android.com/guide/components/broadcasts.

您需要在运行时从活动注册 CONNECTIVITY_CHANGE 操作。 使用注册接收者.

IntentFilter filter = new IntentFilter();
filter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
registerReceiver(new NetworkStateChangeReceiver(), filter);

并且不要忘记注销。

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

广播接收器未调用互联网连接检查 的相关文章

随机推荐

  • java程序计算XIRR而不使用excel或任何其他库

    我的应用程序必须计算XIRR 但我不能使用excel 因为它在Linux上运行 任何人都可以共享逻辑或java代码来计算XIRR而不使用excel 正如帖子中所述 C 中的 xirr 计算 https stackoverflow com q
  • Django - 从单独的应用程序导入视图

    我是 Django 新手 正在阅读 Holovaty 和 Kaplan Moss 所著的 Django Book 我有一个名为 mysite 的项目 其中包含两个名为 books 和 contact 的应用程序 每个都有自己的 view p
  • Selenium Python:如何在点击后等待页面加载?

    我想在点击后获取页面的页面源 然后使用 browser back 函数返回 但是 Selenium 不会让页面在点击后完全加载 并且 JavaScript 生成的内容不会包含在该页面的页面源中 element i click Need to
  • 在分页数之间添加点

    我已经用 PHP 和 AJAX 为表格编写了分页代码 每页将显示表格的 8 行 到这里为止一切正常 我现在需要的是使分页看起来像一系列数字和它们之间的点 如下所示 1 2 3 27 28 29 我有两个用于分页的文件 conf php
  • Ruby 请求 https - “在‘read_nonblock’中:连接被对等方重置 (Errno::ECONNRESET)”

    这是我的代码 domain http www google com url URI parse https graph facebook com fql q SELECT 20url normalized url 20FROM 20link
  • java.lang.NoSuchMethodError: 'com.google.common.collect.ImmutableMap 尝试使用 Chromedriver 和 Maven 执行测试时出错

    我是硒测试的新手 目前正在使用 Maven 观看一些 YouTube 视频 今天 我尝试了一些代码并且工作正常 但是当访问一个商店页面并尝试搜索产品时 它给我 访问被拒绝 消息 于是我尝试了几种打开chrome而不是chromedriver
  • 根据 Web.config Transform 中的子节点值选择节点

    我的 Web 配置中有以下 XML 我想使用 web config 转换选择要删除的属性 但我想根据其中一个子元素的值选择要删除的元素 我的 web config 是这样的
  • 执行bash脚本时如何显示行号

    我有一个测试脚本 其中有很多命令并将生成大量输出 我使用set x or set v and set e 因此当发生错误时脚本将停止 但我还是很难定位到哪一行执行停止了 从而定位问题所在 有没有一种方法可以在每行执行之前输出脚本的行号 或者
  • 使用简单注入器进行方法级属性拦截

    借助 Unity 我能够快速添加基于属性的拦截 如下所示 public sealed class MyCacheAttribute HandlerAttribute ICallHandler public override ICallHan
  • 城堡单轨铁路和 ELMAH

    有人成功使用 Castle MonoRail 和 ELMAH 吗 我们使用许多 Resuces 向用户提供友好的错误消息 但如果我们这样做 异常永远不会到达 ELMAH 因为 MonoRail 救援会拦截它们 理想情况下 我们希望用户看到救
  • 为什么 (1 in [1,0] == True) 的计算结果为 False?

    当我在寻找答案时这个问题 https stackoverflow com questions 9201445 python best way to keep track of results from loop 我发现我不明白自己的答案 我
  • IE7 Z-Index 分层问题

    我隔离了 IE7 的一个小测试用例z indexbug 但不知道如何修复 我一直在玩z index整天 出什么问题了z index in IE7 测试CSS input border 1px solid 000 div border 1px
  • Python在Conda环境中,但在Windows虚拟环境中尚未激活

    我创建了一个Windows 10 Python虚拟环境 env3 7 3 当我打开在虚拟环境中激活的cmd窗口时 在虚拟环境中启动Python时收到以下警告消息 env3 7 3 C Users redex OneDrive Documen
  • 我应该不断地 open() 和 close() 我的 SQL 数据库还是让它保持打开状态?

    我正在创建一个使用 SQL 数据库来存储数据的应用程序 根据应用程序的设计方式 它将每 3 分钟左右更新一次新数据 具体取决于应用程序运行时的用户操作 在我看到的教程中 他们建议您在更改数据库后关闭数据库 就资源而言 这是 昂贵的 是否最好
  • 在 Angular-UI 模式中显示谷歌地图?

    尝试在 Angular UI 模式中加载简单的谷歌地图 然而没有运气 数据传递得很好 但在地图方面没有任何作用 请帮忙 modalInstance opened then function var mapOptions center new
  • 显示mysql中存储路径的图像

    我已将图像上传到文件夹中并将路径存储到 MySQL 数据库中 路径已存储 图像已成功插入文件夹 但我的问题是当我显示存储在数据库中的路径中的图像时 它没有显示 当我回显图像路径时 它会显示图像路径 我检查了浏览器设置 一切正常 这是我的代码
  • 如何正确处理自定义MapFunction中的错误?

    我已经实施了MapFunction对于我的 Apache Flink 流程 它正在解析传入元素并将其转换为其他格式 但有时会出现错误 即传入数据无效 我看到两种可能的处理方法 忽略无效元素 但似乎我无法忽略错误 因为对于任何传入元素 我必须
  • PDO在mysql性能中的作用

    最近我在浏览一篇博客 注意到有关在mysql中使用PDO的一些要点 它改变了我对PDO的看法 要点是 本机准备好的语句无法利用查询缓存 从而导致性能降低 本机准备好的语句无法执行某些类型的查询 例如 SHOW TABLES 本机准备好的语句
  • Aptana 3 是否提供与 Aptana 1.5.1 一样好的 PHP 插件?

    有人用过 Aptana 3 吗 它的 PHP 插件是否和 2 0 一样糟糕 这里仍然运行 Aptana 1 5 1 一切都是内置的 Aptana Studio 3 是一个很棒的工具 尽管从经验来看 在处理大型项目时会出现一些问题
  • 广播接收器未调用互联网连接检查

    我正在尝试制作一个简单的应用程序 它会在互联网连接发生变化时通知是否有可用的互联网连接 我在互联网上找到了一些解决方案并尝试实施它们 但不知何故它不起作用 我在清单文件中注册的广播接收器没有调用网络连接更改 Manifest