home-school-contact-app/文档/Android/app/src/main/java/com/example/nanchen/aiyaschoolpush/net/NetworkStateService.java

150 lines
4.9 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package com.example.nanchen.aiyaschoolpush.net;
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.support.annotation.Nullable;
import android.support.v4.content.LocalBroadcastManager;
import com.example.nanchen.aiyaschoolpush.helper.event.NetStateEvent;
import com.gitonway.lee.niftymodaldialogeffects.lib.NiftyDialogBuilder;
import org.greenrobot.eventbus.EventBus;
/**
* @author nanchen
* @fileName AiYaSchoolPush
* @packageName com.example.nanchen.aiyaschoolpush.net
* @date 2016/12/01 13:55
*/
public class NetworkStateService extends Service {
// 系统网络连接相关的操作管理类.
private ConnectivityManager mManager;
// 网络状态信息的实例
private NetworkInfo mInfo;
/**
* 当前处于的网络
* 0 null
* 1 : 2G/3G/4G
* 2 wifi
*/
public static int networkStatus;
/**
* An action name
*/
public static final String NETWORKSTATE = "com.text.android.network.state";
/**
* 广播实例
*/
private BroadcastReceiver mReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// The action of this intent or null if none is specified.
// action是行动的意思也许是我水平问题无法理解为什么叫行动我一直理解为标识现在理解为意图
String action = intent.getAction(); //当前接受到的广播的标识(行动/意图)
// 当当前接受到的广播的标识(意图)为网络状态的标识时做相应判断
if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
// 获取网络连接管理器
mManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
// 获取当前网络状态信息
mInfo = mManager.getActiveNetworkInfo();
if (mInfo != null && mInfo.isAvailable()) {
//当NetworkInfo不为空且是可用的情况下获取当前网络的Type状态
//根据NetworkInfo.getTypeName()判断当前网络
String name = mInfo.getTypeName();
//更改NetworkStateService的静态变量之后只要在Activity中进行判断就好了
if (name.equals("WIFI")) {
networkStatus = 2;
} else {
networkStatus = 1;
}
} else {
// NetworkInfo为空或者是不可用的情况下
networkStatus = 0;
// UIUtil.showToast("当前网络不可用,请检查网络连接!");
EventBus.getDefault().post(new NetStateEvent());
Intent it = new Intent();
it.putExtra("networkStatus", networkStatus);
it.setAction(NETWORKSTATE);
// sendBroadcast(it); //发送无网络广播给注册了当前服务广播的Activity
/**
* 这里推荐使用本地广播的方式发送:
* LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
*/
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent);
}
}
}
};
private NiftyDialogBuilder mDialogBuilder;
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
//注册网络状态的广播绑定到mReceiver
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);
}
/**
* 判断网络是否可用
*/
public static boolean isNetworkAvailable(Context context) {
// 获取网络连接管理器
ConnectivityManager mgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// 获取当前网络状态信息
NetworkInfo[] info = mgr.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
}