Android实战简易教程<三十八>(模仿腾讯QQ的网络状态提示和设置功能实现)

来源:互联网 发布:酒店净利润算法 编辑:程序博客网 时间:2024/05/13 15:53

项目里要用到一个网络状态判断的功能,想到了QQ的网络状态判断和设置功能,决定模仿一下。实现起来也很是容易,界面较丑,还望原谅。

1.MainActivity.java:

[java] view plaincopy
  1. package com.example.networktest;  
  2.   
  3. import android.app.Activity;  
  4. import android.content.ComponentName;  
  5. import android.content.Context;  
  6. import android.content.Intent;  
  7. import android.net.ConnectivityManager;  
  8. import android.net.NetworkInfo.State;  
  9. import android.os.Bundle;  
  10. import android.view.View;  
  11. import android.view.View.OnClickListener;  
  12. import android.widget.ArrayAdapter;  
  13. import android.widget.Button;  
  14. import android.widget.ListView;  
  15. import android.widget.Toast;  
  16.   
  17. public class MainActivity extends Activity implements OnClickListener {  
  18.     private Button mBtnCheckNetWork;  
  19.     private ConnectivityManager manager;  
  20.     private ListView mLV;  
  21.     private ArrayAdapter<String> simpleAdapter;  
  22.     private String datas[] = { "1111111""1111111""1111111""1111111",  
  23.             "1111111""1111111""1111111""1111111", };  
  24.   
  25.     @Override  
  26.     protected void onCreate(Bundle savedInstanceState) {  
  27.         super.onCreate(savedInstanceState);  
  28.         setContentView(R.layout.activity_main);  
  29.         mBtnCheckNetWork = (Button) findViewById(R.id.btn_network_status);  
  30.         simpleAdapter = new ArrayAdapter<String>(this,  
  31.                 android.R.layout.simple_expandable_list_item_1, datas);  
  32.   
  33.         mLV = (ListView) findViewById(R.id.lv);  
  34.         mLV.setAdapter(simpleAdapter);  
  35.         mBtnCheckNetWork.setOnClickListener(this);  
  36.         checkNetworkState();  
  37.   
  38.     }  
  39.   
  40.     /** 
  41.      * 检测网络是否连接 
  42.      *  
  43.      * @return 
  44.      */  
  45.     private boolean checkNetworkState() {  
  46.         boolean flag = false;  
  47.         // 得到网络连接信息  
  48.         manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);  
  49.         // 去进行判断网络是否连接  
  50.         if (manager.getActiveNetworkInfo() != null) {  
  51.             flag = manager.getActiveNetworkInfo().isAvailable();  
  52.         }  
  53.         if (!flag) { // 网络不可用  
  54.             setNetwork();  
  55.         } else {  
  56.             mBtnCheckNetWork.setVisibility(View.GONE);  
  57.             // isNetworkAvailable();  
  58.         }  
  59.   
  60.         return flag;  
  61.     }  
  62.   
  63.     /** 
  64.      * 网络未连接时,显示button,跳到网络设置页面 
  65.      */  
  66.     private void setNetwork() {  
  67.         mBtnCheckNetWork.setVisibility(View.VISIBLE);  
  68.   
  69.     }  
  70.   
  71.     /** 
  72.      * 网络已经连接,然后去判断是wifi连接还是GPRS连接 设置一些自己的逻辑调用 
  73.      */  
  74.     private void isNetworkAvailable() {  
  75.   
  76.         State gprs = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)  
  77.                 .getState();  
  78.         State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)  
  79.                 .getState();  
  80.         if (gprs == State.CONNECTED || gprs == State.CONNECTING) {  
  81.             Toast.makeText(this"wifi is open! gprs", Toast.LENGTH_SHORT)  
  82.                     .show();  
  83.         }  
  84.         // 判断为wifi状态下才加载广告,如果是GPRS手机网络则不加载!  
  85.         if (wifi == State.CONNECTED || wifi == State.CONNECTING) {  
  86.             Toast.makeText(this"wifi is open! wifi", Toast.LENGTH_SHORT)  
  87.                     .show();  
  88.         }  
  89.   
  90.     }  
  91.   
  92.     @Override  
  93.     public void onClick(View v) {  
  94.         switch (v.getId()) {  
  95.         case R.id.btn_network_status:  
  96.             Intent intent = null;  
  97.             /** 
  98.              * 判断手机系统的版本!如果API大于10 就是3.0+ 因为3.0以上的版本的设置和3.0以下的设置不一样,调用的方法不同 
  99.              */  
  100.             if (android.os.Build.VERSION.SDK_INT > 10) {  
  101.                 intent = new Intent(  
  102.                         android.provider.Settings.ACTION_WIFI_SETTINGS);  
  103.             } else {  
  104.                 intent = new Intent();  
  105.                 ComponentName component = new ComponentName(  
  106.                         "com.android.settings",  
  107.                         "com.android.settings.WirelessSettings");  
  108.                 intent.setComponent(component);  
  109.                 intent.setAction("android.intent.action.VIEW");  
  110.             }  
  111.             startActivity(intent);  
  112.   
  113.             break;  
  114.   
  115.         default:  
  116.             break;  
  117.         }  
  118.     }  
  119.   
  120.     @Override  
  121.     protected void onRestart() {//设置完成后返回到本页面要进行再次判断网络状态  
  122.         super.onRestart();  
  123.         checkNetworkState();  
  124.     }  
  125.   
  126. }  
2.activity_main.xml:

[html] view plaincopy
  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  2.     xmlns:tools="http://schemas.android.com/tools"  
  3.     android:layout_width="match_parent"  
  4.     android:layout_height="match_parent"  
  5.     android:background="#ffffff"  
  6.     android:orientation="vertical" >  
  7.   
  8.     <Button  
  9.         android:id="@+id/btn_network_status"  
  10.         android:layout_width="match_parent"  
  11.         android:layout_height="wrap_content"  
  12.         android:background="#ffffff"  
  13.         android:drawableLeft="@drawable/warning"  
  14.         android:drawableRight="@drawable/arrow"  
  15.         android:paddingLeft="20dp"  
  16.         android:paddingRight="10dp"  
  17.         android:visibility="gone"  
  18.         android:text="  世界上最遥远的距离就是没网。检查设置"  
  19.         android:textSize="12sp" />  
  20.     <ListView  
  21.         android:id="@+id/lv"  
  22.         android:layout_height="match_parent"  
  23.         android:layout_width="match_parent"/>  
  24.   
  25. </LinearLayout>  

3.注意配置权限:

[html] view plaincopy
  1. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>  

在没网的情况下运行实例:


点击上面的button,跳到网络设置页面:

设置完成后按返回键跳转到MainActivity:(Button键自动隐藏)



这里有一个问题就是假设进入MainActivity前有网络,而进入后没网络,就不好判断了。我们这里只是一个模拟,在具体项目中,你可以在每次进行网络请求之前都进行网络判断,可以根据网络状态通过Handler改变Button的显示与否。

0 0