用服务和广播去监听系统网络状态的连接操作

废话不多说,先上效果图:

有网络连接状态
这里写图片描述

无网络连接状态
这里写图片描述

相信这二种情况,在很多应用中都有体现!直接上代码,注释很详细

第一步:主体界面,开启服务类

public class MainActivity extends AppCompatActivity {

    //需要显示的状态
    private RelativeLayout mNetWorkView;
    private NetworkBroadcastReceiveHelp mNetworkBroadcastReceiveHelp;

    /*第一步*/
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mNetWorkView = (RelativeLayout) findViewById(R.id.view_no_network);
        //开启网络状态服务
        Intent intent = new Intent(this,NetWorkStateService.class);
        startService(intent);

        registerBroadcast();
    }

    /*第四步*/
    private void registerBroadcast() {
        //接收来自本地广播接收类的的广播
        mNetworkBroadcastReceiveHelp = new NetworkBroadcastReceiveHelp(this, new NetworkBroadcastReceiveHelp.OnNetworkStateChangedListener() {
            @Override
            public void onConnected() {
                //控制文本的显示和隐藏
                mNetWorkView.setVisibility(View.GONE);
            }

            @Override
            public void onDisConnected() {
                mNetWorkView.setVisibility(View.VISIBLE);
                //具体的进一步操作--引导用户去连接网络
            }
        });
        mNetworkBroadcastReceiveHelp.register();
    }

    //销毁网络状态服务及广播
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Intent intent = new Intent(this,NetWorkStateService.class);
        stopService(intent);
        mNetworkBroadcastReceiveHelp.unRegister();
    }
}

第二步:具体的服务类操作

/**
 * Created by pxw on 2017/6/5.
 * 网络服务类,第二步
 */

public class NetWorkStateService extends Service {

    private SharedPreferences shared;
    private SharedPreferences.Editor editor;

    //接收来自系统的网络连接广播
    private BroadcastReceiver mReceiver;

    {
        mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                String action = intent.getAction();
                //判断广播发送行动
                if (TextUtils.equals(ConnectivityManager.CONNECTIVITY_ACTION, action)) {
                    //获取连接网络管理器
                    ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                    //获取器网络连接的对象
                    NetworkInfo info = connectivityManager.getActiveNetworkInfo();
                    //判断是存在且不为空
                    if (info != null && info.isAvailable()) {
                        //获取连接类型
                        String typeName = info.getTypeName();
                    /*if(TextUtils.equals("WIFI", name)) {
                        editor.putString("netType", "wifi");
                        editor.commit();
                    } else {
                        editor.putString("netType", "3g");
                        editor.commit();
                    }*/

                        //发送连接状态广播--ReceiverConst.ACTION_CONNECTIONED状态标识
                        sendNetworkStateBroadCast(ReceiverConst.ACTION_CONNECTIONED);
                    } else {
                        //发送非连接状态广播
                        sendNetworkStateBroadCast(ReceiverConst.ACTION_NO_CONNECTION);
                    }
                }
            }
        };
    }

    //发送本地广播通知网络状态
    private void sendNetworkStateBroadCast(String actionConnectioned) {
        if(TextUtils.equals(ReceiverConst.ACTION_CONNECTIONED,actionConnectioned) ||
                TextUtils.equals(ReceiverConst.ACTION_NO_CONNECTION,actionConnectioned)) {
            Intent intent = new Intent(actionConnectioned);
            //本地广播管理器
            LocalBroadcastUtils.send(getApplicationContext(),intent);
        }
    }

    //绑定需要操作的数据,默认情况下可以返回为空
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    //注册系统默认广播
    @Override
    public void onCreate() {
        super.onCreate();
        //此时可以做些当前用户的保存操作
        shared = getSharedPreferences("userInfo", 0);
        editor = shared.edit();

        //开启服务的时候,开启系统广播 ConnectiviyManager网络连接管理类
        IntentFilter mFilter = new IntentFilter();
        mFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        registerReceiver(mReceiver, mFilter);
    }

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

    //onStartCommand会告诉系统如何重启服务,如判断是否异常终止后重新启动
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return super.onStartCommand(intent, flags, startId);
    }
}

第三步:网络状态服务帮助类

/**
 * Created by pxw on 2017/6/5.
 * 网络状态广播接收者帮助类
 * 统一管理,供多次调用使用,第三步
 */

public class NetworkBroadcastReceiveHelp {

    private Context mContext;
    private OnNetworkStateChangedListener mOnNetworkStateChangedListener;
    private BroadcastReceiver mReceiver;

    public NetworkBroadcastReceiveHelp(Context context,OnNetworkStateChangedListener  MonNetworkStateChangedListener) {
        this.mContext = context;
        this.mOnNetworkStateChangedListener = MonNetworkStateChangedListener;
    }
    //接收来自NetworkStateService服务开启的广播::行动ACTION_CONNECTIONED  ||  ACTION_NO_CONNECTION
    public  void register(){
        mReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                      if(TextUtils.equals(ReceiverConst.ACTION_CONNECTIONED,intent.getAction())) {
                          if(mOnNetworkStateChangedListener != null) {
                              mOnNetworkStateChangedListener.onConnected();
                          }
                      }else if(TextUtils.equals(ReceiverConst.ACTION_NO_CONNECTION,intent.getAction())) {
                          if(mOnNetworkStateChangedListener != null) {
                              mOnNetworkStateChangedListener.onDisConnected();
                          }
                      }
            }
        };
        IntentFilter filter = new IntentFilter();
        filter.addAction(ReceiverConst.ACTION_CONNECTIONED);
        filter.addAction(ReceiverConst.ACTION_NO_CONNECTION);
        LocalBroadcastUtils.register(mContext,mReceiver,filter);
    }

    public void setOnNetworkStateChangedListener(OnNetworkStateChangedListener onNetworkStateChangedListener) {
        this.mOnNetworkStateChangedListener = onNetworkStateChangedListener;
    }

    public OnNetworkStateChangedListener getOnNetworkStateChangedListener() {
        return this.mOnNetworkStateChangedListener;
    }

    public void unRegister(){
        LocalBroadcastUtils.unregister(mContext,mReceiver);
    }
    //定义接口供外界调用
    public interface OnNetworkStateChangedListener{
        void onConnected();
        void onDisConnected();
    }
}

第四步:回到第一步操作中的第四步
帮助类及广播状态标识类如下

/**
 * 利用LocalBroadcastManager管理广播
 */
public class LocalBroadcastUtils {
    /**
     * 注册广播
     * @param context
     * @param broadcastReceiver
     * @param intentFilter
     */
    public static void register(Context context, BroadcastReceiver broadcastReceiver, IntentFilter intentFilter) {
        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
        localBroadcastManager.registerReceiver(broadcastReceiver, intentFilter);
    }

    /**
     * 注销广播
     * @param context
     * @param broadcastReceiver
     */
    public static void unregister(Context context, BroadcastReceiver broadcastReceiver) {
        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
        localBroadcastManager.unregisterReceiver(broadcastReceiver);
    }

    /**
     * 发送广播
     * @param context
     * @param intent
     */
    public static void send(Context context, Intent intent) {
        LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(context);
        localBroadcastManager.sendBroadcast(intent);
    }
}
/**
 * Created by pxw on 2017/6/5.
 * 广播状态标识
 */

public class ReceiverConst {

    //连接状态
    public final static String ACTION_CONNECTIONED = "ACTION_CONNECTIONED";
    //非连接状态
    public final static String ACTION_NO_CONNECTION = "ACTION_NO_CONNECTION";
}

最后:别忘了添加权限和注册服务

 <!--配置权限-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <!--注册服务-->
        <service android:name=".NetWorkStateService"/>

以上:就ok

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值