首页 > 系统 > Android > 正文

Android 网络状态实时监听代码实例(一)

2020-01-02 07:02:43
字体:
来源:转载
供稿:网友

其实手机在网络方面的的监听也比较重要,有时候我们必须实时监控这个程序的实时网络状态,android在网络断开与连接的时候都会发出广播,我们通过接收系统的广播就可以实现网络的监听。

1、添加访问网络和获取网络状态的权限

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

2、新建一个Application类并继承android.app.Application 申明变量保存网络状态

package com.javen.application;import com.javen.netbroadcast.NetUtil;public class Application extends android.app.Application {private static Application mApplication;public static int mNetWorkState;public static synchronized Application getInstance() {return mApplication;}@Overridepublic void onCreate() {super.onCreate();mApplication = this;initData();}public void initData() {mNetWorkState = NetUtil.getNetworkState(this);}}

3、新建NetBroadcastReceiver类继承BroadcastReceiver 并实现onReceive方法 在onReceive方法通知接口完成加载

package com.javen.receiver;import java.util.ArrayList;import com.javen.application.Application;import com.javen.netbroadcast.NetUtil;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;public class NetBroadcastReceiver extends BroadcastReceiver {public static ArrayList<netEventHandler> mListeners = new ArrayList<netEventHandler>();private static String NET_CHANGE_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";@Overridepublic void onReceive(Context context, Intent intent) {if (intent.getAction().equals(NET_CHANGE_ACTION)) {Application.mNetWorkState = NetUtil.getNetworkState(context);if (mListeners.size() > 0)// 通知接口完成加载for (netEventHandler handler : mListeners) {handler.onNetChange();}}}public static abstract interface netEventHandler {public abstract void onNetChange();}}

4、在应该的Activity中实现netEventHandler接口

package com.javen.netbroadcast;import com.javen.receiver.NetBroadcastReceiver;import com.javen.receiver.NetBroadcastReceiver.netEventHandler;import com.javen.ui.base.BaseActivity;import android.os.Bundle;import android.view.Menu;public class MainActivity extends BaseActivity implements netEventHandler{@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);NetBroadcastReceiver.mListeners.add(this);}@Overridepublic boolean onCreateOptionsMenu(Menu menu) {// Inflate the menu; this adds items to the action bar if it is present.getMenuInflater().inflate(R.menu.main, menu);return true;}@Overridepublic void onNetChange() {// TODO Auto-generated method stubif (NetUtil.getNetworkState(this) == NetUtil.NETWORN_NONE) {T.showLong(this, R.string.net_err);}else {T.showLong(this, "网络可以使用");}}}

5、判断网络的工具类

package com.javen.netbroadcast;import android.content.Context;import android.net.ConnectivityManager;import android.net.NetworkInfo.State;public class NetUtil {public static final int NETWORN_NONE = 0;public static final int NETWORN_WIFI = 1;public static final int NETWORN_MOBILE = 2;public static int getNetworkState(Context context) {ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);// WifiState state = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState();if (state == State.CONNECTED || state == State.CONNECTING) {return NETWORN_WIFI;}// 3Gstate = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState();if (state == State.CONNECTED || state == State.CONNECTING) {return NETWORN_MOBILE;}return NETWORN_NONE;}}

以上所述是小编给大家介绍的Android 网络状态实时监听代码实例(一),希望对大家有所帮助!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表