ツールクラス--ネットワーク関連
41296 ワード
目次通常ネットワーク状態検出 の2つの方式は、ブロードキャスト傍受ネットワークの状態変化 によって変化する.方式一、放送+普通コールバック 方式二、放送+LiveData 一般的なネットワーク状態検出携帯電話がネットワークに接続するかどうかを判断する デバイスがwifi接続するかどうかを判断する デバイスがデータ接続するか否かを判断する .イーサネット接続かどうかを判断 取得装置ip 2つの方式は、ブロードキャストによるネットワーク状態の変化を傍受する
使用方法2、簡単で使いやすい
方式一、放送+普通コールバックネットワークブロードキャスト アシストツールクラス 使用方式
方式二、放送+LiveDataライブデータをカスタマイズし、内部の放送結果により現在のライブデータの値 を設定.使用形態
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import cc.catface.ctool.context.TContext;
public class TNetwork {
/** */
public static boolean isNetAvail() {
ConnectivityManager manager = (ConnectivityManager) TContext.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == manager) return false;
NetworkInfo info = manager.getActiveNetworkInfo();
return null != info && info.isAvailable();
}
/* wifi */
public static boolean isWIFI() {
ConnectivityManager manager = (ConnectivityManager) TContext.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == manager) return false;
NetworkInfo networkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
return null != networkInfo && networkInfo.isConnected();
}
/* */
public static boolean isMobile() {
ConnectivityManager manager = (ConnectivityManager) TContext.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == manager) return false;
NetworkInfo networkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE_DUN);
return null != networkInfo && networkInfo.isConnected();
}
/* */
public static boolean isEthernet() {
ConnectivityManager manager = (ConnectivityManager) TContext.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == manager) return false;
NetworkInfo networkInfo = manager.getNetworkInfo(ConnectivityManager.TYPE_ETHERNET);
return null != networkInfo && networkInfo.isConnected();
}
/** ip */
public static String getIp() {
WifiManager wifiManager = (WifiManager) TContext.getContext().getApplicationContext().getSystemService(Context.WIFI_SERVICE);
if (null == wifiManager) return "";
WifiInfo connectionInfo = wifiManager.getConnectionInfo();
return convertIp(connectionInfo.getIpAddress());
}
private static String convertIp(int ip) {
return (ip & 0xff) + "." + ((ip >> 8) & 0xff) + "." + ((ip >> 16) & 0xff) + "." + ((ip >> 24) & 0xff);
}
}
使用方法2、簡単で使いやすい
方式一、放送+普通コールバック
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
public class NetBroadcastReceiver extends BroadcastReceiver {
private NetEventListener mListener;
@Override public void onReceive(Context context, Intent intent) {
if (null == intent || null == intent.getAction()) {
mListener.onNetChange(NetStateUtil.NETWORK_NONE);
return;
}
if (intent.getAction().equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
int netWorkType = NetStateUtil.getNetWorkType();
mListener.onNetChange(netWorkType);
}
}
public interface NetEventListener {
void onNetChange(int netWorkType);
}
public void setListener(NetEventListener listener) {
if (null != listener) this.mListener = listener;
}
}
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import cc.catface.ctool.context.TContext;
public class NetStateUtil {
public static final int NETWORK_NONE = -1; //
public static final int NETWORK_MOBILE = 0; //
public static final int NETWORK_WIFI = 1; //
public static int getNetWorkType() {
int result = NETWORK_NONE;
ConnectivityManager manager = (ConnectivityManager) TContext.getContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == manager) return NETWORK_NONE;
NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();
if (null == activeNetworkInfo || !activeNetworkInfo.isConnected()) return result;
if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_WIFI)) result = NETWORK_WIFI;
if (activeNetworkInfo.getType() == (ConnectivityManager.TYPE_MOBILE))
result = NETWORK_MOBILE;
return result;
}
}
``
//
mReceiver = new NetBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
mActivity.registerReceiver(mReceiver, filter);
mReceiver.setListener(netWorkType -> {
String netState = " ";
if (NetStateUtil.NETWORK_WIFI == netWorkType) {
netState = "wifi";
} else if (NetStateUtil.NETWORK_MOBILE == netWorkType) {
netState = " ";
}
mBinding.tiNetState.setContent(" :" + netState);
});
//
@Override public void onDestroy() {
super.onDestroy();
if (null != mReceiver) mActivity.unregisterReceiver(mReceiver);
}
方式二、放送+LiveData
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 androidx.lifecycle.LiveData;
import java.lang.ref.WeakReference;
public class NetworkLiveData extends LiveData<NetworkInfo> {
private final WeakReference<Context> mWeakContext;
private static NetworkLiveData mNetworkLiveData;
private NetworkReceiver mReceiver;
private final IntentFilter mFilter;
private NetworkLiveData(WeakReference<Context> context) {
mWeakContext = context;
mReceiver = new NetworkReceiver();
mFilter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
}
public static NetworkLiveData getInstance(WeakReference<Context> context) {
if (null == mNetworkLiveData) {
synchronized (NetworkLiveData.class) {
if (null == mNetworkLiveData) {
mNetworkLiveData = new NetworkLiveData(context);
}
}
}
return mNetworkLiveData;
}
@Override protected void onActive() {
super.onActive();
mWeakContext.get().registerReceiver(mReceiver, mFilter);
}
@Override protected void onInactive() {
super.onInactive();
mWeakContext.get().unregisterReceiver(mReceiver);
}
private static class NetworkReceiver extends BroadcastReceiver {
@Override public void onReceive(Context context, Intent intent) {
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == manager) return;
NetworkInfo info = manager.getActiveNetworkInfo();
getInstance(new WeakReference<>(context)).setValue(info);
}
}
}
NetworkLiveData.getInstance(new WeakReference<>(mActivity)).observe(mActivity, new Observer<NetworkInfo>() {
@Override public void onChanged(NetworkInfo networkInfo) {
TLog.d(getClass().getName() + "-->networkInfo: " + networkInfo);
}
});