美文网首页Android
Android系统广播监听网络断开

Android系统广播监听网络断开

作者: 烂吹笙 | 来源:发表于2017-05-14 22:42 被阅读0次

我们的应用有时候需要检测网络断开,并且给用户友好的提示。根据需求,我们觉得利用Android系统广播,当我们收到断开网络的时候,我们弹出一个Dialog。这个时候我们需要新建一个BaseActivity。

package com.wj.networkcheckdemo.base;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import com.wj.networkcheckdemo.R;
import com.wj.networkcheckdemo.bean.ActivityController;

public class BaseActivity extends AppCompatActivity {

    private NetWorkChangeBroadcastReceiver myReceiver;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_base);

        ActivityController.setCurrentActivity(this);

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

    }

    class NetWorkChangeBroadcastReceiver extends BroadcastReceiver {

        @Override
        public void onReceive(Context context, Intent intent) {
            ConnectivityManager connectivityManager =
                    (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (connectivityManager != null) {
                NetworkInfo[] networkInfos = connectivityManager.getAllNetworkInfo();
                for (int i = 0; i < networkInfos.length; i++) {
                    NetworkInfo.State state = networkInfos[i].getState();
                    if (NetworkInfo.State.CONNECTED == state) {
                        //有网络,直接跳出该方法
                        return;
                    }
                }
            }
            final Activity activity = ActivityController.getCurrentActivity();//Dialog依托于Activity。所以该方法用户存储唯一可视的Activity
            if (activity != null) {
                showDialog(activity);
            }
        }
    }


    public void showDialog(Context context) {
        AlertDialog.Builder dialog = new AlertDialog.Builder(context);
        dialog.setTitle("提示")
                .setMessage("您已经断网了,是否重新连接")
                .setCancelable(false)
                .setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {


                    }
                }).setNegativeButton("取消", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {

            }
        });
        dialog.create().show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        unregisterReceiver(myReceiver);
    }
}


我们知道Dialog是依托在Activity之上的。所以我们保存了一个Activity对象。
最后别忘记添加两个重要的权限。

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

相关文章

  • Android系统广播监听网络断开

    我们的应用有时候需要检测网络断开,并且给用户友好的提示。根据需求,我们觉得利用Android系统广播,当我们收到断...

  • android网络监听学习笔记

    网络变化android自带广播、采用广播接收器接收网络变化的监听 自定义广播接收 为了方便全局监听在baseact...

  • 第一行代码 -- 笔记2

    五、广播机制 1.接收系统广播 动态注册监听时间变化 静态注册实现开机启动 在 Android 8.0 系统之后,...

  • 安卓广播机制

    标准广播 有序广播 接收系统广播 1.动态注册监听网络变化 public class MainActivity e...

  • Android-实时监听网络状态变化(观察者)

    实现流程概括 首先,我们要实现实时监听,肯定要用到广播机制:Android系统在网络状态发生变化时会发送一条广播,...

  • 监听网络变化--含7.0以上适配

    我们知道最早监听网络变化,是通过广播,静态或动态注册广播,处理"android.net.conn.CONNECTI...

  • BroadCast

    网络状态监听 开机广播监听 发送广播 发送标准广播

  • Android广播监听网络状态

    1.先说一下广播,广播分为两种:静态广播和动态广播。静态广播即是静态注册的,而动态广播是代码动态注册。静态注册是通...

  • Android 判断网络连接状态

    在Android上,我们需要对不同的网络情况做出一些操作。官方提供了监听网络状态变化的广播,用来监听网络的变化情况...

  • 监听网络状态变化——广播接收者

    手机的网络状态监听:android系统已经有这样一个动作,当手机的网络状态发生改变时,发送一个广播;所以我只需要做...

网友评论

    本文标题:Android系统广播监听网络断开

    本文链接:https://www.haomeiwen.com/subject/kzlcxxtx.html