Android之中如何用广播ConnectivityManager.CONNECTIVITY_ACTION监听网络变化,将其显示在通知栏上

本文介绍如何在Android应用中使用BroadcastReceiver结合ConnectivityManager.CONNECTIVITY_ACTION监听网络状态变化,并将网络变化信息显示在通知栏上。通过创建Service,注册BroadcastReceiver,当接收到网络连接动作时,获取并解析NetworkInfo,判断网络是否可用,然后在状态栏展示相关信息。
摘要由CSDN通过智能技术生成
import android.app.Service;
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.IBinder;
import android.util.Log;

public class ListenNetStateService extends Service {
    private ConnectivityManager connectivityManager;
    private NetworkInfo info;

    private BroadcastReceiver mReceiver = new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                Log.d("mark", "网络状态已经改变");
                connectivityManager = (ConnectivityManager)      

                                         getSystemService(Context.CONNECTIVITY_SERVICE);
                info = connectivityManager.getActiveNetworkInfo();  
                if(info != null && info.isAvailable()) {
                    String name = info.getTypeName();
                    Log.d("mark", "当前网络名称:" + name);
                } else {
                    Log.d("mark", "没有可用网络");
                }
            }
        }
    };

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        IntentFilter mFilter = new IntentFilter();
        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mReceiver, mFilter);
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        unregisterReceiver(mReceiver);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }
}

好的,以下是实现要求的代码: 首先,在 AndroidManifest.xml 文件中添加以下权限: ```xml <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> ``` 然后,在需要监听网络变化的 Activity 或 Service 中,动态注册广播接收器: ```java public class MainActivity extends AppCompatActivity { private NetworkChangeReceiver networkChangeReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // 动态注册广播接收器 networkChangeReceiver = new NetworkChangeReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); registerReceiver(networkChangeReceiver, intentFilter); } @Override protected void onDestroy() { super.onDestroy(); // 取消注册广播接收器 unregisterReceiver(networkChangeReceiver); } } ``` 接着,创建一个 BroadcastReceiver 类,用于接收网络变化广播: ```java public class NetworkChangeReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // 输出日志 Log.d("NetworkChangeReceiver", "网络状态发生变化"); // 显示 Toast Toast.makeText(context, "网络状态发生变化", Toast.LENGTH_SHORT).show(); } } ``` 注意,这里使用了 Log.d() 方法输出日志,可以在开发者选项中查看。如果不需要输出日志,可以将这行代码注释掉。并且,在不需要监听网络变化时,应该及时取消注册广播接收器。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值