经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android网络监听和网络判断示例介绍
来源:jb51  时间:2021/12/9 13:46:06  对本文有异议

一、在AndroidMainfest.xml中添加权限

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

二、NetUtilSS 网络判断工具类

  1. import android.app.Activity;
  2. import android.app.AlertDialog;
  3. import android.content.Context;
  4. import android.content.DialogInterface;
  5. import android.content.Intent;
  6. import android.location.LocationManager;
  7. import android.net.ConnectivityManager;
  8. import android.net.NetworkInfo;
  9. import android.telephony.TelephonyManager;
  10. import android.util.Log;
  11. import java.util.List;
  12. public class NetUtilSS {
  13. // 没有连接
  14. public static final int NETWORN_NONE = 0;
  15. // wifi连接
  16. public static final int NETWORN_WIFI = 1;
  17. // 手机网络数据连接
  18. public static final int NETWORN_2G = 2;
  19. public static final int NETWORN_3G = 3;
  20. public static final int NETWORN_4G = 4;
  21. public static final int NETWORN_MOBILE = 5;
  22. private NetUtilSS() {
  23. /* cannot be instantiated */
  24. throw new UnsupportedOperationException("cannot be instantiated");
  25. }
  26. /**
  27. * 判断网络是否连接
  28. *
  29. * @param context
  30. * @return
  31. */
  32. public static boolean isConnected(Context context) {
  33. ConnectivityManager connectivity = (ConnectivityManager) context
  34. .getSystemService(Context.CONNECTIVITY_SERVICE);
  35. // 如果仅仅是用来判断网络连接
  36. if (null != connectivity) {
  37. NetworkInfo info = connectivity.getActiveNetworkInfo();
  38. if (null != info && info.isConnected()) {
  39. if (info.getState() == NetworkInfo.State.CONNECTED) {
  40. return true;
  41. }
  42. }
  43. }
  44. return false;
  45. }
  46. /**
  47. * 判断GPS是否打开
  48. *
  49. * @param context
  50. * @return
  51. */
  52. public static boolean isGpsEnabled(Context context) {
  53. LocationManager lm = ((LocationManager) context
  54. .getSystemService(Context.LOCATION_SERVICE));
  55. List<String> accessibleProviders = lm.getProviders(true);
  56. return accessibleProviders != null && accessibleProviders.size() > 0;
  57. }
  58. /**
  59. * 判断是否是3G网络
  60. * @param context
  61. * @return
  62. */
  63. public static boolean is3rd(Context context) {
  64. ConnectivityManager cm = (ConnectivityManager) context
  65. .getSystemService(Context.CONNECTIVITY_SERVICE);
  66. NetworkInfo networkINfo = cm.getActiveNetworkInfo();
  67. if (networkINfo != null
  68. && networkINfo.getType() == ConnectivityManager.TYPE_MOBILE) {
  69. return true;
  70. }
  71. return false;
  72. }
  73. /**
  74. * 判断是wifi还是3g网络,用户的体现性在这里了,wifi就可以建议下载或者在线播放。
  75. *
  76. * @param context
  77. * @return
  78. */
  79. public static boolean isWifi(Context context) {
  80. ConnectivityManager cm = (ConnectivityManager) context
  81. .getSystemService(Context.CONNECTIVITY_SERVICE);
  82. NetworkInfo networkINfo = cm.getActiveNetworkInfo();
  83. if (networkINfo != null
  84. && networkINfo.getType() == ConnectivityManager.TYPE_WIFI) {
  85. return true;
  86. }
  87. return false;
  88. }
  89. /**
  90. * 打开网络设置界面
  91. */
  92. public static void openSetting(final Activity activity) {
  93. Log.e("netutils", "我是网络1111");
  94. final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
  95. builder.setTitle("开启网络服务");
  96. builder.setMessage("网络没有连接,请到设置进行网络设置!");
  97. builder.setPositiveButton("确定",
  98. new DialogInterface.OnClickListener() {
  99. public void onClick(DialogInterface dialog, int which) {
  100. if (android.os.Build.VERSION.SDK_INT > 10) {
  101. // 3.0以上打开设置界面,也可以直接用ACTION_WIRELESS_SETTINGS打开到wifi界面
  102. activity.startActivity(new Intent(
  103. android.provider.Settings.ACTION_SETTINGS));
  104. } else {
  105. activity.startActivity(new Intent(
  106. android.provider.Settings.ACTION_WIRELESS_SETTINGS));
  107. }
  108. dialog.cancel();
  109. }
  110. });
  111. builder.setNegativeButton("取消",
  112. new DialogInterface.OnClickListener() {
  113. @Override
  114. public void onClick(DialogInterface dialog, int which) {
  115. dialog.cancel();
  116. Log.e("netutils", "我是网络");
  117. }
  118. });
  119. builder.show();
  120. }
  121. /**
  122. * 返回当前网络连接类型
  123. *
  124. * @param context 上下文
  125. * @return
  126. */
  127. public static int getNetworkState(Context context) {
  128. ConnectivityManager connManager = (ConnectivityManager) context
  129. .getSystemService(Context.CONNECTIVITY_SERVICE);
  130. if (null == connManager)
  131. return NETWORN_NONE;
  132. NetworkInfo activeNetInfo = connManager.getActiveNetworkInfo();
  133. if (activeNetInfo == null || !activeNetInfo.isAvailable()) {
  134. return NETWORN_NONE;
  135. }
  136. // Wifi
  137. NetworkInfo wifiInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
  138. if (null != wifiInfo) {
  139. NetworkInfo.State state = wifiInfo.getState();
  140. if (null != state)
  141. if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
  142. return NETWORN_WIFI;
  143. }
  144. }
  145. // 网络
  146. NetworkInfo networkInfo = connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
  147. if (null != networkInfo) {
  148. NetworkInfo.State state = networkInfo.getState();
  149. String strSubTypeName = networkInfo.getSubtypeName();
  150. if (null != state)
  151. if (state == NetworkInfo.State.CONNECTED || state == NetworkInfo.State.CONNECTING) {
  152. switch (activeNetInfo.getSubtype()) {
  153. case TelephonyManager.NETWORK_TYPE_GPRS: // 联通2g
  154. case TelephonyManager.NETWORK_TYPE_CDMA: // 电信2g
  155. case TelephonyManager.NETWORK_TYPE_EDGE: // 移动2g
  156. case TelephonyManager.NETWORK_TYPE_1xRTT:
  157. case TelephonyManager.NETWORK_TYPE_IDEN:
  158. return NETWORN_2G;
  159. case TelephonyManager.NETWORK_TYPE_EVDO_A: // 电信3g
  160. case TelephonyManager.NETWORK_TYPE_UMTS:
  161. case TelephonyManager.NETWORK_TYPE_EVDO_0:
  162. case TelephonyManager.NETWORK_TYPE_HSDPA:
  163. case TelephonyManager.NETWORK_TYPE_HSUPA:
  164. case TelephonyManager.NETWORK_TYPE_HSPA:
  165. case TelephonyManager.NETWORK_TYPE_EVDO_B:
  166. case TelephonyManager.NETWORK_TYPE_EHRPD:
  167. case TelephonyManager.NETWORK_TYPE_HSPAP:
  168. return NETWORN_3G;
  169. case TelephonyManager.NETWORK_TYPE_LTE:
  170. return NETWORN_4G;
  171. default://有机型返回16,17
  172. //中国移动 联通 电信 三种3G制式
  173. if (strSubTypeName.equalsIgnoreCase("TD-SCDMA") || strSubTypeName.equalsIgnoreCase("WCDMA") || strSubTypeName.equalsIgnoreCase("CDMA2000")) {
  174. return NETWORN_3G;
  175. } else {
  176. return NETWORN_MOBILE;
  177. }
  178. }
  179. }
  180. }
  181. return NETWORN_NONE;
  182. }
  183. }

三、IntentReceiver网络监听工具类

  1. import android.content.BroadcastReceiver;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.net.ConnectivityManager;
  5. import android.net.NetworkInfo;
  6. public class IntentReceiver extends BroadcastReceiver {
  7. private boolean isnet ;
  8. @Override
  9. public void onReceive(Context context, Intent intent) {
  10. ConnectivityManager manager = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
  11. NetworkInfo activeNetworkInfo = manager.getActiveNetworkInfo();
  12. if (isnet == true){
  13. if (activeNetworkInfo != null && activeNetworkInfo.isAvailable()){
  14. ToastUtils.getInstance(context).show("网络连接成功",1000);
  15. SpUtils.putString(context,"network","有网");
  16. isnet = false;
  17. }else{
  18. ToastUtils.getInstance(context).show("网络开小差了",1000);
  19. SpUtils.putString(context,"network","无网");
  20. isnet = true;
  21. }
  22. }else{
  23. isnet = true;
  24. }
  25. isnet = true;
  26. }
  27. }

四、BaseActivity

  1. import androidx.appcompat.app.AppCompatActivity;
  2. import android.content.BroadcastReceiver;
  3. import android.content.Context;
  4. import android.content.IntentFilter;
  5. import android.net.ConnectivityManager;
  6. import android.os.Bundle;
  7. import android.widget.Toast;
  8. public class BaseActivity extends AppCompatActivity {
  9. private BroadcastReceiver receiver = new IntentReceiver();
  10. @Override
  11. protected void onCreate(Bundle savedInstanceState) {
  12. super.onCreate(savedInstanceState);
  13. setContentView(R.layout.activity_base);
  14. IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
  15. this.registerReceiver(receiver,filter);
  16. boolean connected = NetUtilSS.isConnected(this);
  17. if (connected) {
  18. boolean wifi = NetUtilSS.isWifi(this);
  19. boolean rd = NetUtilSS.is3rd(this);
  20. if (wifi) {
  21. Toast.makeText(this, "WIFI已经连接", Toast.LENGTH_SHORT).show();
  22. SpUtils.putString(this,"network","有网");
  23. } else if (rd) {
  24. Toast.makeText(this, "手机流量已经连接", Toast.LENGTH_SHORT).show();
  25. SpUtils.putString(this,"network","有网");
  26. } else {
  27. Toast.makeText(this, "网络连接不可用,请检查网络设置", Toast.LENGTH_SHORT).show();
  28. SpUtils.putString(this,"network","无网");
  29. // NetUtilSS.openSetting((Activity) mContext);
  30. }
  31. } else {
  32. Toast.makeText(this, "网络连接不可用,请检查网络设置", Toast.LENGTH_SHORT).show();
  33. SpUtils.putString(this,"network","无网");
  34. // NetUtilSS.openSetting((Activity) mContext);
  35. }
  36. }
  37. public static boolean isNetwork(Context context){
  38. String network = SpUtils.getString(context, "network");
  39. if (network.equals("有网")){
  40. return true;
  41. }
  42. return false;
  43. }
  44. @Override
  45. protected void onDestroy() {
  46. super.onDestroy();
  47. unregisterReceiver(receiver);
  48. }
  49. }

五、MainActivity? ?

  1. import androidx.appcompat.app.AppCompatActivity;
  2. import android.content.Intent;
  3. import android.os.Bundle;
  4. import android.util.Log;
  5. import android.view.View;
  6. import android.widget.TextView;
  7. public class MainActivity extends BaseActivity {
  8. String TAG = "MainActivity";
  9. @Override
  10. protected void onCreate(Bundle savedInstanceState) {
  11. super.onCreate(savedInstanceState);
  12. setContentView(R.layout.activity_main);
  13. if (isNetwork(this)){
  14. Log.e(TAG,"有网");
  15. //请求
  16. //....
  17. }else {
  18. Log.e(TAG,"无网");
  19. //提示
  20. //....
  21. }
  22. }
  23. }

到此这篇关于Android网络监听和网络判断示例介绍的文章就介绍到这了,更多相关Android网络监听和网络判断内容请搜索w3xue以前的文章或继续浏览下面的相关文章希望大家以后多多支持w3xue!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号