项目里要用到一个网络状态判断的功能,想到了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();
}
}
2.activity_main.xml:
<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的显示与否。
喜欢的朋友关注下!多谢支持!