• Android连载19-广播机制之网络状态显示


    一、我们创建一个新的android项目来进行演示广播机制中是如何​显示网络状态的。

    package com.example.broadcasttest2;
    
    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.Menu;
    
    import android.view.MenuItem;
    
    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");
    
        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 connectionMananger = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
    
          NetworkInfo networkInfo = connectionMananger.getActiveNetworkInfo();
    
          if(networkInfo != null && networkInfo.isAvailable()) {
    
            Toast.makeText(context, "network is available", Toast.LENGTH_SHORT).show();       
    
          } else {
    
            Toast.makeText(context, "network is unavailable", Toast.LENGTH_SHORT).show();
    
          }
    
    ​
    
         
    
        }
    
      }
    
    }
    
    ​

    (1)首先建立一个IntentFilter实例,并且接下来添加一个值“andorid.net.conn.CONNECTIVITY_CHANGE的action。为什么要添加它呢​?因为当网络状态发生变化的时候,系统会发出一条值为上述的​的消息,也就是说广播接收器​想要监听什么样的广播,这里添加什么值就可以。

    (2)我们建立一个内部类,这个内部类继承了android自有的广播接收器,然后进行改写​。

    里面的一个onReceive方法,每当网络状态发生变化的时候,这个方法都会得到执行​。

    创建一个ConnectionManager实例,然后调用方法,来获取网络状态,存入到NetworkInfo变量​中去。

    通过这个变量来进行判断,有网络就显示”网络可获得“,没有网络就显示”网络不可以获得“

    (3)接下来创建一个NetworkChangeReceiver实例,然后将广播接收器以及网络状态实例,作为参数,传给上述实例,加以封装​执行。

    (4)最后要记得,动态注册的广播接收器一定要去取消注册,这就是Destroy​方法实现。

    (5)打开设置进行调节网络状态

     

    (6)另外有一点说明,android系统为了保证应用程序中的安全性做了规定,如果程序需要去访问一些系统的关键信息,必须在配置文件中声明权限才可以,否则,程序将会直接崩溃,比如这里的查询系统的网络状态,就是需要声明的,打开AndroidManifext.xml文件

    <?xml version="1.0" encoding="utf-8"?>
    
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    
        package="com.example.broadcasttest2"
    
        android:versionCode="1"
    
        android:versionName="1.0" ><uses-sdk
    
            android:minSdkVersion="14"
    
            android:targetSdkVersion="19" />
    
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
        <application
    
            android:allowBackup="true"
    
            android:icon="@drawable/ic_launcher"
    
            android:label="@string/app_name"
    
            android:theme="@style/AppTheme" >
    
            <activity
    
                android:name=".MainActivity"
    
                android:label="@string/app_name" >
    
                <intent-filter>
    
                    <action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
    
                </intent-filter>
    
            </activity>
    
        </application></manifest>

    即可完成​声明。

    二、源码:

    BroadcastTest2

    https://github.com/ruigege66/Android/tree/master/BroadcastTest2

    2.CSDN:https://blog.csdn.net/weixin_44630050

    3.博客园:https://www.cnblogs.com/ruigege0000/

    4.欢迎关注微信公众号:傅里叶变换,个人公众号,仅用于学习交流,后台回复”礼包“,获取大数据学习资料

  • 相关阅读:
    python基础学习之路No.2 数据类型
    练习题 --- 猜数字游戏
    python基础学习之路No.1
    python+selenium第一步
    Self-introduction
    oracle中的number类型
    简单选项卡切换(二)
    简单选项卡切换(一)
    简单焦点轮播(二)(图片可滚动)
    简单焦点轮播(一)
  • 原文地址:https://www.cnblogs.com/ruigege0000/p/13171122.html
Copyright © 2020-2023  润新知