关闭

Android 广播接收器学习之监听网络变化

标签: android网络手机继承broadcastreceiver
1806人阅读 评论(1) 收藏 举报
分类:

广播接收器可以自由地对自己感兴趣的广播进行注册,这样当有相应的广播发出时, 广播接收器就能够收到该广播,并在内部处理相应的逻辑。注册广播的方式一般有两种。
在代码中注册和在AndroidManifest.xml 中注册, 其中前者也被称为动态注册, 后者也被称为静态注册。

我们要怎样监听手机的网络变化呢?

只需要新建一个类, 让它继承自BroadcastReceiver,并重写父类的 onReceive()方法就行了。 这样当有广播到来时, onReceive()方法就会得到执行,具体的逻辑就可以在这个方法中处理

所以我们先新建一个继承与BroadCastReceiver的内部类,

    class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isAvailable()) {
                Toast.makeText(context, "网络打开",
                        Toast.LENGTH_SHORT).show();
            }
            else {
                Toast.makeText(context, "网络关闭",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }

可以看到,我们在 MainActivity 中定义了一个内部类 NetworkChangeReceiver,这个类是继承自 BroadcastReceiver 的,并重写了父类的 onReceive()方法。 这样每当网络状态发生变化时,onReceive()方法就会得到执行

然后我们通过 getSystemService()方法得到了 ConnectivityManager 的实例, 这是一个系统服务类, 专门用于管理网络连接的。 然后调用它的 getActiveNetworkInfo()方法可以得到 NetworkInfo 的实例*

接着调用 NetworkInfo 的 isAvailable()方法,就可以判断出当前是否有网络了,最后我们通过 Toast 的方式对用户进行提示。

在MainActivity中我们对这个类进行调用



import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;

import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {
    private IntentFilter intentFilter;

    private NetworkChangeReceiver networkChangeReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        intentFilter = new IntentFilter();
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");//为过滤器添加 广播过滤
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);
    }

    class NetworkChangeReceiver extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo();
            if (networkInfo != null && networkInfo.isAvailable()) {
                Toast.makeText(context, "网络打开",
                        Toast.LENGTH_SHORT).show();
            }
            else {
                Toast.makeText(context, "网络关闭",
                        Toast.LENGTH_SHORT).show();
            }
        }
    }
}

我们通过一个过滤器 接收到 android.net.conn.CONNECTIVITY_CHANGE 的广播

注册这个接收器 这样就能监听网络的变化了,但是我们还是需要在Manifest文件中添加权限,不然就会停止工作*

添加这个权限就能正常工作了

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
1
0
查看评论

Android 的网络判定(网络连接类型和监听网络连接变化)

现在,Android手机作为市场占有量最大的移动设备,拥有着无数的需要连接网络的App,同时人们也渐渐不能离开需要网络的生活,相信大家都知道,在一些IMApp,类似于QQ,Wechat等通信工具中,并不需要很大的网络流量,普通的GPRS数据流量就可以应付自如。但是,当需要在线收看视频或者下载大型软件...
  • gongzhiyao3739124
  • gongzhiyao3739124
  • 2016-10-14 20:03
  • 3643

android开发框架(四)监听网络连接状态

Android开发过程中,通常需要对网络连接状态进行判断,其目的可分为以下几种: 避免无用的网络请求:当没有网络连接时或网络较差时,无需进行网络请求 减少流量的消耗:当需要下载大文件或者加载视频,图片时,需要进行网络判断,减少流量的消耗 Android系统在ApplicationFrameWork为...
  • Missueverday
  • Missueverday
  • 2016-04-07 10:27
  • 3286

android监听手机网络连接状态改变的后台服务

package com.example.afinaljianzhimao.util; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; i...
  • ETmanwenhan
  • ETmanwenhan
  • 2014-04-22 15:46
  • 1992

Android 7.0 网络变化监听

一般监听网络变化是在 AndroidManifest 中注册 BroadcastReceiver 来实现。 targetSdkVersion 升级到 24 后,发现静态注册广播的方式要被取消了。 Declaring a broadcastreceiver for android.net.conn....
  • hqiangtai
  • hqiangtai
  • 2016-11-19 11:16
  • 4100

Android开发动态的监听网络状态的变化

主要思路:使用Android中的四大组件之:BrocastReceiver监听网络状态的变化。接收到网络状态改变的广播之后判断当前的网络是否可用。创建广播接收器MyNetworkReceiver public class MyNetworkReceiver extends BroadcastRece...
  • night_dragon
  • night_dragon
  • 2017-01-07 16:28
  • 5367

Android 7.0监听网络变化(转载)

一般监听网络变化是在 AndroidManifest 中注册 BroadcastReceiver 来实现。 targetSdkVersion 升级到 24 后,发现静态注册广播的方式要被取消了。 Declaring a broadcastreceiver for android.net.conn....
  • beyondwu123
  • beyondwu123
  • 2017-10-30 17:20
  • 415

Android 通过注册广播,实时监听网络连接与断开状态的变化

很多时候我们都需要实时监听网络状态,当网络状态发生变化之后立即通知程序进行不同的操作。 监听广播的两种方式: (1)在AndroidManifest.xml配置文件中声明<receiver android:name=".NetworkConnectChangedReceiver...
  • qq_20785431
  • qq_20785431
  • 2016-05-27 23:42
  • 14025

安卓通过广播实时监听当前网络状况

需求: 当网络断开或者连接上的时候,需要你的APP作出一定的响应,有时候还需要判断当前网络的类型,wifi或者移动数据… 分析:网络发生变化系统会发送广播 通过注册一个广播接收器来接收广播 判断当前变化的网络是什么状态(wifi,移动数据,无网络) 最后一个接口回调当前的状态·瞬间爆炸...
  • z1353095373
  • z1353095373
  • 2016-12-13 09:17
  • 3184

静态注册广播监听网络变化

常用的IM聊天App中都会判断网络连接是否可用,今天我们就用静态注册注册广播来监听网络的变化:首先申请网络权限 然后在mainifest文件静态注册广播: <receiver android:name=".NetWorkChangeReceiver...
  • dhl_1986
  • dhl_1986
  • 2017-02-06 15:48
  • 798

Android之监测手机网络状态的广播

今天具体说下Android检测网络状态的广播,我们在做一些手机应用的时候如果网络发生改变可能会给用户造成一些损失,在中国2G,3G网络都没有普及的情况下,基本都是包流量的,所以在做一些视频应用软件的时候,如果用户在使用WIFI的时候如果无线网络中断,手机网络会自动换手机网络,从而给用户造成不必要的损...
  • lonely_fireworks
  • lonely_fireworks
  • 2012-03-20 22:53
  • 31917
    个人资料
    • 访问:112189次
    • 积分:1387
    • 等级:
    • 排名:千里之外
    • 原创:41篇
    • 转载:3篇
    • 译文:0篇
    • 评论:32条
    博客专栏
    最新评论