Android網(wǎng)絡(luò)監(jiān)聽和網(wǎng)絡(luò)判斷示例介紹
一、在AndroidMainfest.xml中添加權(quán)限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
二、NetUtilSS 網(wǎng)絡(luò)判斷工具類
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
import android.util.Log;
import java.util.List;
public class NetUtilSS {
// 沒有連接
public static final int NETWORN_NONE = 0;
// wifi連接
public static final int NETWORN_WIFI = 1;
// 手機(jī)網(wǎng)絡(luò)數(shù)據(jù)連接
public static final int NETWORN_2G = 2;
public static final int NETWORN_3G = 3;
public static final int NETWORN_4G = 4;
public static final int NETWORN_MOBILE = 5;
private NetUtilSS() {
/* cannot be instantiated */
throw new UnsupportedOperationException("cannot be instantiated");
}
/**
* 判斷網(wǎng)絡(luò)是否連接
*
* @param context
* @return
*/
public static boolean isConnected(Context context) {
ConnectivityManager connectivity = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
// 如果僅僅是用來判斷網(wǎng)絡(luò)連接
if (null != connectivity) {
NetworkInfo info = connectivity.getActiveNetworkInfo();
if (null != info && info.isConnected()) {
if (info.getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
return false;
}
/**
* 判斷GPS是否打開
*
* @param context
* @return
*/
public static boolean isGpsEnabled(Context context) {
LocationManager lm = ((LocationManager) context
.getSystemService(Context.LOCATION_SERVICE));
List<String> accessibleProviders = lm.getProviders(true);
return accessibleProviders != null && accessibleProviders.size() > 0;
}
/**
* 判斷是否是3G網(wǎng)絡(luò)
* @param context
* @return
*/
public static boolean is3rd(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkINfo = cm.getActiveNetworkInfo();
if (networkINfo != null
&& networkINfo.getType() == ConnectivityManager.TYPE_MOBILE) {
return true;
}
return false;
}
/**
* 判斷是wifi還是3g網(wǎng)絡(luò),用戶的體現(xiàn)性在這里了,wifi就可以建議下載或者在線播放。
*
* @param context
* @return
*/
public static boolean isWifi(Context context) {
ConnectivityManager cm = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkINfo = cm.getActiveNetworkInfo();
if (networkINfo != null
&& networkINfo.getType() == ConnectivityManager.TYPE_WIFI) {
return true;
}
return false;
}
/**
* 打開網(wǎng)絡(luò)設(shè)置界面
*/
public static void openSetting(final Activity activity) {
Log.e("netutils", "我是網(wǎng)絡(luò)1111");
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setTitle("開啟網(wǎng)絡(luò)服務(wù)");
builder.setMessage("網(wǎng)絡(luò)沒有連接,請到設(shè)置進(jìn)行網(wǎng)絡(luò)設(shè)置!");
builder.setPositiveButton("確定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
if (android.os.Build.VERSION.SDK_INT > 10) {
// 3.0以上打開設(shè)置界面,也可以直接用ACTION_WIRELESS_SETTINGS打開到wifi界面
activity.startActivity(new Intent(
android.provider.Settings.ACTION_SETTINGS));
} else {
activity.startActivity(new Intent(
android.provider.Settings.ACTION_WIRELESS_SETTINGS));
}
dialog.cancel();
}
});
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
Log.e("netutils", "我是網(wǎng)絡(luò)");
}
});
builder.show();
}
/**
* 返回當(dāng)前網(wǎng)絡(luò)連接類型
*
* @param context 上下文
* @return
*/
public static int getNetworkState(Context context) {
ConnectivityManager connManager = (ConnectivityManager) context
.getSystemService(Context.CONNECTIVITY_SERVICE);
if (null == connManager)
return NETWORN_NONE;
NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo();
if (activeNetInfo == null || !activeNetInfo.isAvailable()) {
return NETWORN_NONE;
}
// Wifi
NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
if (null != wifiInfo) {
NetworkInfo.State state = wifiInfo.getState();
if (null != state)
if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
return NETWORN_WIFI;
}
}
// 網(wǎng)絡(luò)
NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
if (null != networkInfo) {
NetworkInfo.State state = networkInfo.getState();
String strSubTypeName = networkInfo.getSubtypeName();
if (null != state)
if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
switch (activeNetInfo.getSubtype()) {
case TelephonyManager.NETWORK_TYPE_GPRS: // 聯(lián)通2g
case TelephonyManager.NETWORK_TYPE_CDMA: // 電信2g
case TelephonyManager.NETWORK_TYPE_EDGE: // 移動2g
case TelephonyManager.NETWORK_TYPE_1xRTT:
case TelephonyManager.NETWORK_TYPE_IDEN:
return NETWORN_2G;
case TelephonyManager.NETWORK_TYPE_EVDO_A: // 電信3g
case TelephonyManager.NETWORK_TYPE_UMTS:
case TelephonyManager.NETWORK_TYPE_EVDO_0:
case TelephonyManager.NETWORK_TYPE_HSDPA:
case TelephonyManager.NETWORK_TYPE_HSUPA:
case TelephonyManager.NETWORK_TYPE_HSPA:
case TelephonyManager.NETWORK_TYPE_EVDO_B:
case TelephonyManager.NETWORK_TYPE_EHRPD:
case TelephonyManager.NETWORK_TYPE_HSPAP:
return NETWORN_3G;
case TelephonyManager.NETWORK_TYPE_LTE:
return NETWORN_4G;
default://有機(jī)型返回16,17
//中國移動 聯(lián)通 電信 三種3G制式
if (strSubTypeName.equalsIgnoreCase("TD-SCDMA") || strSubTypeName.equalsIgnoreCase("WCDMA") || strSubTypeName.equalsIgnoreCase("CDMA2000")) {
return NETWORN_3G;
} else {
return NETWORN_MOBILE;
}
}
}
}
return NETWORN_NONE;
}
}
三、IntentReceiver網(wǎng)絡(luò)監(jiān)聽工具類
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
public class IntentReceiver extends BroadcastReceiver {
private boolean isnet ;
@Override
public void onReceive(Context context, Intent intent) {
ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();
if (isnet == true){
if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()){
ToastUtils.getInstance(context).show("網(wǎng)絡(luò)連接成功",1000);
SpUtils.putString(context,"network","有網(wǎng)");
isnet = false;
}else{
ToastUtils.getInstance(context).show("網(wǎng)絡(luò)開小差了",1000);
SpUtils.putString(context,"network","無網(wǎng)");
isnet = true;
}
}else{
isnet = true;
}
isnet = true;
}
}
四、BaseActivity
import androidx.appcompat.app.AppCompatActivity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.os.Bundle;
import android.widget.Toast;
public class BaseActivity extends AppCompatActivity {
private BroadcastReceiver receiver = new IntentReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_base);
IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
this.registerReceiver(receiver,filter);
boolean connected = NetUtilSS.isConnected(this);
if (connected) {
boolean wifi = NetUtilSS.isWifi(this);
boolean rd = NetUtilSS.is3rd(this);
if (wifi) {
Toast.makeText(this, "WIFI已經(jīng)連接", Toast.LENGTH_SHORT).show();
SpUtils.putString(this,"network","有網(wǎng)");
} else if (rd) {
Toast.makeText(this, "手機(jī)流量已經(jīng)連接", Toast.LENGTH_SHORT).show();
SpUtils.putString(this,"network","有網(wǎng)");
} else {
Toast.makeText(this, "網(wǎng)絡(luò)連接不可用,請檢查網(wǎng)絡(luò)設(shè)置", Toast.LENGTH_SHORT).show();
SpUtils.putString(this,"network","無網(wǎng)");
// NetUtilSS.openSetting((Activity) mContext);
}
} else {
Toast.makeText(this, "網(wǎng)絡(luò)連接不可用,請檢查網(wǎng)絡(luò)設(shè)置", Toast.LENGTH_SHORT).show();
SpUtils.putString(this,"network","無網(wǎng)");
// NetUtilSS.openSetting((Activity) mContext);
}
}
public static boolean isNetwork(Context context){
String network = SpUtils.getString(context, "network");
if (network.equals("有網(wǎng)")){
return true;
}
return false;
}
@Override
protected void onDestroy() {
super.onDestroy();
unregisterReceiver(receiver);
}
}
五、MainActivity? ?
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends BaseActivity {
String TAG = "MainActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (isNetwork(this)){
Log.e(TAG,"有網(wǎng)");
//請求
//....
}else {
Log.e(TAG,"無網(wǎng)");
//提示
//....
}
}
}
到此這篇關(guān)于Android網(wǎng)絡(luò)監(jiān)聽和網(wǎng)絡(luò)判斷示例介紹的文章就介紹到這了,更多相關(guān)Android網(wǎng)絡(luò)監(jiān)聽和網(wǎng)絡(luò)判斷內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android實現(xiàn)省市區(qū)三級聯(lián)動
這篇文章主要為大家詳細(xì)介紹了Android實現(xiàn)省市區(qū)三級聯(lián)動,Spinner實現(xiàn)省市區(qū)的三級聯(lián)動,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07
Android中的AtomicLong原理、使用與實戰(zhàn)指南
本文詳細(xì)介紹了AtomicLong在Android多線程開發(fā)中的應(yīng)用,包括其核心原理、基本使用、適用場景、生產(chǎn)環(huán)境實戰(zhàn)案例以及性能優(yōu)化建議,通過大量Kotlin代碼示例,幫助開發(fā)者更好地理解和使用AtomicLong,感興趣的朋友一起看看吧2025-03-03
android實現(xiàn)手機(jī)與單片機(jī)藍(lán)牙模塊通信
這篇文章主要為大家詳細(xì)介紹了android實現(xiàn)手機(jī)與單片機(jī)藍(lán)牙模塊通信的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05
Android UI控件RatingBar實現(xiàn)自定義星星評分效果
這篇文章主要為大家詳細(xì)介紹了Android UI控件RatingBar實現(xiàn)自定義星星評分效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-02-02
Android 使用Vitamio打造自己的萬能播放器(5)——在線播放(播放優(yōu)酷視頻)
本文主要介紹Android Vitamio的使用,這里給大家提供效果圖和代碼實例,來說明Vitamio組件播放網(wǎng)絡(luò)視頻,有需要的小伙伴可以參考下2016-07-07

