项目里要用到一个网络状态判断的功能,想到了QQ的网络状态判断和设置功能,决定模仿一下。实现起来也很是容易,界面较丑,还望原谅。
1.MainActivity.java:
- package com.example.networktest;
- import android.app.Activity;
- import android.content.ComponentName;
- import android.content.Context;
- import android.content.Intent;
- import android.net.ConnectivityManager;
- import android.net.NetworkInfo.State;
- import android.os.Bundle;
- import android.view.View;
- import android.view.View.OnClickListener;
- import android.widget.ArrayAdapter;
- import android.widget.Button;
- import android.widget.ListView;
- import android.widget.Toast;
- public class MainActivity extends Activity implements OnClickListener {
- private Button mBtnCheckNetWork;
- private ConnectivityManager manager;
- private ListView mLV;
- private ArrayAdapter<String> simpleAdapter;
- private String datas[] = { "1111111", "1111111", "1111111", "1111111",
- "1111111", "1111111", "1111111", "1111111", };
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- mBtnCheckNetWork = (Button) findViewById(R.id.btn_network_status);
- simpleAdapter = new ArrayAdapter<String>(this,
- android.R.layout.simple_expandable_list_item_1, datas);
- mLV = (ListView) findViewById(R.id.lv);
- mLV.setAdapter(simpleAdapter);
- mBtnCheckNetWork.setOnClickListener(this);
- checkNetworkState();
- }
- /**
- * 检测网络是否连接
- *
- * @return
- */
- private boolean checkNetworkState() {
- boolean flag = false;
- // 得到网络连接信息
- manager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
- // 去进行判断网络是否连接
- if (manager.getActiveNetworkInfo() != null) {
- flag = manager.getActiveNetworkInfo().isAvailable();
- }
- if (!flag) { // 网络不可用
- setNetwork();
- } else {
- mBtnCheckNetWork.setVisibility(View.GONE);
- // isNetworkAvailable();
- }
- return flag;
- }
- /**
- * 网络未连接时,显示button,跳到网络设置页面
- */
- private void setNetwork() {
- mBtnCheckNetWork.setVisibility(View.VISIBLE);
- }
- /**
- * 网络已经连接,然后去判断是wifi连接还是GPRS连接 设置一些自己的逻辑调用
- */
- private void isNetworkAvailable() {
- State gprs = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE)
- .getState();
- State wifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI)
- .getState();
- if (gprs == State.CONNECTED || gprs == State.CONNECTING) {
- Toast.makeText(this, "wifi is open! gprs", Toast.LENGTH_SHORT)
- .show();
- }
- // 判断为wifi状态下才加载广告,如果是GPRS手机网络则不加载!
- if (wifi == State.CONNECTED || wifi == State.CONNECTING) {
- Toast.makeText(this, "wifi is open! wifi", Toast.LENGTH_SHORT)
- .show();
- }
- }
- @Override
- public void onClick(View v) {
- switch (v.getId()) {
- case R.id.btn_network_status:
- Intent intent = null;
- /**
- * 判断手机系统的版本!如果API大于10 就是3.0+ 因为3.0以上的版本的设置和3.0以下的设置不一样,调用的方法不同
- */
- if (android.os.Build.VERSION.SDK_INT > 10) {
- intent = new Intent(
- android.provider.Settings.ACTION_WIFI_SETTINGS);
- } else {
- intent = new Intent();
- ComponentName component = new ComponentName(
- "com.android.settings",
- "com.android.settings.WirelessSettings");
- intent.setComponent(component);
- intent.setAction("android.intent.action.VIEW");
- }
- startActivity(intent);
- break;
- default:
- break;
- }
- }
- @Override
- protected void onRestart() {//设置完成后返回到本页面要进行再次判断网络状态
- super.onRestart();
- checkNetworkState();
- }
- }
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:background="#ffffff"
- android:orientation="vertical" >
- <Button
- android:id="@+id/btn_network_status"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:background="#ffffff"
- android:drawableLeft="@drawable/warning"
- android:drawableRight="@drawable/arrow"
- android:paddingLeft="20dp"
- android:paddingRight="10dp"
- android:visibility="gone"
- android:text=" 世界上最遥远的距离就是没网。检查设置"
- android:textSize="12sp" />
- <ListView
- android:id="@+id/lv"
- android:layout_height="match_parent"
- android:layout_width="match_parent"/>
- </LinearLayout>
3.注意配置权限:
- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
在没网的情况下运行实例:
点击上面的button,跳到网络设置页面:
设置完成后按返回键跳转到MainActivity:(Button键自动隐藏)
这里有一个问题就是假设进入MainActivity前有网络,而进入后没网络,就不好判断了。我们这里只是一个模拟,在具体项目中,你可以在每次进行网络请求之前都进行网络判断,可以根据网络状态通过Handler改变Button的显示与否。