您的位置:首页 > 理论基础 > 计算机网络

使用Service和BroadcastReceiver实时监听网络状态

2016-01-21 11:03 603 查看
很多时候我们都需要实时监听网络状态,当网络状态发生变化后通知程序实行不同的策略。

这里,我采用Service+BroadcastReceiver的形式实时监听网络变化。

原理是程序在背后启一个Service,在Service中注册一个广播,当网络变化时会产生一个ConnectivityManager.CONNECTIVITY_ACTION事件,只要监听这个事件就可以了。代码如下:

package com.badgeviewtest;

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 NetworkStateService extends Service{
private static final String tag="tag";
private ConnectivityManager connectivityManager;
private NetworkInfo info;
private BroadcastReceiver mReceiver=new BroadcastReceiver(){

@Override
public void onReceive(Context arg0, Intent intent) {
String action=intent.getAction();
if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION)){
Log.d(tag,"网络状态已经改变");
connectivityManager=(ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE);
info=connectivityManager.getActiveNetworkInfo();
if(info!=null &&info.isAvailable()){
String name=info.getTypeName();
Log.d(tag,"当前的网络为"+name);
}else{
Log.d(tag,"没有可用网络");
}
}

}

};

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
return super.onStartCommand(intent, flags, startId);
}

@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 IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}

}


别忘了在Manifast中配置这个Service:

Xml代码

<service android:enabled="true" android:name="com.reyo.util.NetworkStateService" />


还有权限:

Xml代码

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


在必要的地方启动该Service即可:

Java代码

Intent i=new Intent(context,NetworkStateService.class);
startService(i);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: