動態註冊監聽網絡變化

原创 2016年06月01日 14:10:07

1、首先需要新建一個類,讓它繼承BroadcastReceiver,並重寫onReceiver()方法。
這樣當有廣播到來時,onReceiver()就會執行。

package com.example.broadcasttest;

import android.app.Activity;
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.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {
    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");  // 當網絡狀態發生變化時,系統發出值為android.net.conn.CONNECTIVITY_CHANGE的 action
        networkChangeReceiver = new NetworkChangeReceiver();
        registerReceiver(networkChangeReceiver, intentFilter);  // 通過registerReceiver()方法進行廣播的註冊
    }
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(networkChangeReceiver);  //在onDestroy()中對廣播進行取消註冊
    };
    class NetworkChangeReceiver extends BroadcastReceiver{  //繼承BroadcastReceiver類
        @Override
        public void onReceive(Context context, Intent intent) { //每當網絡發生變化時,該方法會執行
            // TODO Auto-generated method stub
            //通過getSystemService()得到ConnectivityManager的實例,這是一個系統服務類,專門用於管理網絡連接的。
            ConnectivityManager connecitonManager = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
            //調用getActiveNetworkInfo()方法得到NetworkInfo 實例。
            NetworkInfo networkInfo = connecitonManager.getActiveNetworkInfo();
            if(networkInfo != null && networkInfo.isAvailable()){ //通過isAvailable()判斷是否有網絡
                Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();
            }else{
                Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
            }

        }
    }
}

創建內部類NetworkChangeReceiver ,並繼承BroadcastReceiver,重新onReceiver()方法。在onReceiver()中通過getSystemService()方法獲取ConnectivityManager實例,這是一個系統服務類,專門用於管理網絡連接,然後調用它的getActiveNetworkInfo()方法得到NetworkInfo實例。
接著調用NetworkInfo的isAvailable()獲取當前的網絡狀態。
在onCreate()方法中,首先創建一個IntentFilter實例,並給它添加一個值為android.net.conn.CONNECTIVITY_CHANGE的action,當網絡發生變化時,系統會發出一條值為android.net.conn.CONNECTIVITY_CHANGE的廣播。
創建一個內部類NetworkChangeReceiver實例,調用registerReceiver()方法進行註冊,將NetworkChangeReceiver實例以及IntentFilter實例都傳下去。這樣NetworkChangeReceiver 就會收到值為android.net.conn.CONNECTIVITY_CHANGE的廣播。
最後要記住,動態註冊的廣播接收器一定要取消註冊,通常會在onDestroy()方法中調用unregisterReceiver()方法實現取消註冊。

主要說明:
android為了保證應用程序的安全性做了規定,如果程序需要訪問一些系統關鍵性信息,必須在配置文件中聲明權限才可以,否則程序會直接崩潰。
查詢網絡聲明如下(AndroidManifest.xml):

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

註冊監聽器的兩種方法

1、通過匿名類的方式註冊監聽器(為每個按鈕設定監聽)package com.example.uiwidgettest;import android.app.Activity; import andro...
  • jlz87
  • jlz87
  • 2016年05月20日 08:32
  • 203

靜態註冊實現開機啟動

靜態註冊可以實現在程序未啟動時接收廣播 1、新增BootCompleteReceiver類,繼承BroadcastReceiver,package com.example.broadcasttest...
  • jlz87
  • jlz87
  • 2016年06月01日 14:52
  • 280

关于socket应用:一个不断监听一个进程的服务器以及发送信息的客户端 TCP的三次握手和四次挥手

大端节序:高位节放在低地址        小端节序:高位节放在高地址        PC多采用小端节序,而手机多采用大端节序,在网络传播过程中一律转换成大端节序,所以大端节序也称为网络字节序。    ...
  • hello_bravo_
  • hello_bravo_
  • 2016年07月16日 18:35
  • 1724

清晰高效的深度学习(Deep Learning)框架:Caffe

Caffe( http://caffe.berkeleyvision.org/ )是一个清晰而高效的深度学习框架,其作者是博士毕业于UC Berkeley的贾扬清( http://daggerfs...
  • jacke121
  • jacke121
  • 2015年09月02日 09:53
  • 391

Spring学习总结(10)——Spring JMS---三种消息监听器

消息监听器MessageListener 在spring整合JMS的应用中我们在定义消息监听器的时候一共可以定义三种类型的消息监听器,分别是MessageListener、SessionAwareM...
  • u012562943
  • u012562943
  • 2016年05月16日 12:51
  • 7479

直方图均衡化(python实现)

直方图均衡化 用途:  通常用来增加许多图像的全局对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比...
  • maryhuan
  • maryhuan
  • 2013年10月17日 13:19
  • 2100

Python之抓取动态网页

python之抓取花瓣网图片 实现方法: 1,创建一个文件夹。 2,模拟请求网络服务。 3,匹配抓取的图片。 4,保存。#_*_coding:utf8_*_ import re import...
  • qq_33483515
  • qq_33483515
  • 2015年12月24日 15:04
  • 580

android 动态绘制各种图形

Android 中动态的绘制有两种方法,一种是用OpenGL ES,它主要用来做3D图形开发,对于一般的应用,我们会采取自定义一个View,然后覆盖onDraw()的方法。下面来讲一下第二种方法。 ...
  • luosiye312
  • luosiye312
  • 2016年03月07日 12:45
  • 1820

網絡Io实现方式

我们在实践中接触最多的网络模型是以太网以及TCP/IP协议栈,UDP在一些场景中也会用到,那么当我们使用Socket 套接字进行网络通信开发时,下面介绍会用到的三种方式。 一:BIO方式   BI...
  • qq_32423845
  • qq_32423845
  • 2017年11月12日 16:23
  • 35

C#调用天气预报网络服务

本程序通过调用网络上公开的天气预报网络服务来显示某个地区三天的天气,使用到的网络服务地址:http://www.webxml.com.cn/WebServices/WeatherWebService....
  • liucheng5037
  • liucheng5037
  • 2014年07月23日 14:37
  • 1735
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:動態註冊監聽網絡變化
举报原因:
原因补充:

(最多只允许输入30个字)