AndroidWIFI需要知道的WIFI状态以及WIFI权限:
WIFI网卡的状态:
1.WIFI_STATE_DISABLED //WIFI网卡不可用
2.WIFI_STATE_DISABLING //WIFI网卡正在关闭
3.WIFI_STATE_ENABLED //WIFI网卡可用
4.WIFI_STATE_ENABLING //WIFI网卡正在打开
5.WIFI_STATE_UNKNOWN //WIFI网卡状态未知
操作WIFI所需权限:
//允许APP发起网络请求
//允许APP改变网络连接状态
//允许APP改变WIFI连接状态
//允许APP获取网络的状态信息
//允许APP获取WIFI的状态信息
整体流程就是:
1.创建页面布局,分别定义打开WIFI,关闭WIFI,获取WIFI状态,获取网络状态,获取数据按钮
2.得到UI控件
3.创建WIFI管理器对象
4.得到系统服务
5.通过Manager.setWifiEnabled(true/false)打开或者关闭WIFI设备
6.通过Manager.getWifiState得到wifi状态(开启或者关闭)
7.使用isNetworkOnline()方法得到的网络状态(自定义方法,具体看代码)
8.创建自定义类CustomTaskextends AsyncTask,通过execute()传入的url值得到该url网络数据(通过onPostExecute监听该类的doInBackground方法得到返回的数据)
代码:
package com.example.adminis.androidwifiapp;
import android.app.Activity;
import android.content.Context;
import android.media.AudioManager;
import android.media.SoundPool;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.wifi.WifiManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
public class MainActivity extends Activity implements View.OnClickListener {
private Button btn_startWifi,btn_closeWifi,btn_getWifiStatus,btn_getWorkStatus,btn_getData,btn_SoundPool;
private TextView tv_show;
private boolean OnClick = true;
private WifiManager Manager; //Wifi管理器
private CustomTask customTask; //自定义的类
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//得到UI相应控件,并对按键事件进行接口
tv_show = (TextView) findViewById(R.id.tv_showpage);
btn_startWifi = (Button) findViewById(R.id.btn_startWifi);
btn_startWifi.setOnClickListener(this);
btn_closeWifi = (Button) findViewById(R.id.btn_closeWifi);
btn_closeWifi.setOnClickListener(this);
btn_getWifiStatus = (Button) findViewById(R.id.btn_getWifiStatus);
btn_getWifiStatus.setOnClickListener(this);
btn_getWorkStatus = (Button) findViewById(R.id.btn_getWorkStatus);
btn_getWorkStatus.setOnClickListener(this);
btn_getData = (Button) findViewById(R.id.btn_getData);
btn_getData.setOnClickListener(this);
}
//按键事件的接口
@Override
public void onClick(View view) {
//得到系统的服务
Manager = (WifiManager) MainActivity.this.getSystemService(Context.WIFI_SERVICE);
//通过Toast返回状态信息
String result = "";
switch (view.getId()){
case R.id.btn_startWifi:
if(Manager.setWifiEnabled(true)){
result = "启动WIFI成功";
}else {
result = "启动WIFI失败";
}
break;
case R.id.btn_closeWifi:
if(Manager.setWifiEnabled(false)){
result = "关闭WIFI成功";
}else {
result = "关闭WIFI失败";
}
break;
case R.id.btn_getWifiStatus:
switch (Manager.getWifiState()){
case WifiManager.WIFI_STATE_DISABLED:
result = "WIFI已关闭";
break;
case WifiManager.WIFI_STATE_DISABLING:
result = "WIFI正在关闭中";
break;
case WifiManager.WIFI_STATE_ENABLED:
result = "WIFI已启用WIFI";
break;
case WifiManager.WIFI_STATE_ENABLING:
result = "WIFI正在启动中";
break;
case WifiManager.WIFI_STATE_UNKNOWN:
result = "WIFI未知状态";
break;
}
break;
//得到网络状态
case R.id.btn_getWorkStatus:
if(isNetworkOnline()){
result = "有网络...";
}else {
result = "没有网络...";
}
break;
//得到网络数据
case R.id.btn_getData:
if(isNetworkOnline()) {
result = "正在请求数据.....";
customTask = new CustomTask();
customTask.execute("http://www.baidu.com");
}else {
result = "此时无可用网络,请检查";
}
break;
}
//提示
Toast.makeText(this,result,Toast.LENGTH_SHORT).show();
}
//自定义CustomTask类
private class CustomTask extends AsyncTask<String,Integer,String>{
//这个string是使用execute传进去的URL
@Override
protected String doInBackground(String... strings) {
try {
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(strings[0]);
HttpResponse response = client.execute(get);//启动
//判断是否有数据(通过状态码)
if(response.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
HttpEntity entity = response.getEntity(); //得到数据
return EntityUtils.toString(entity); //直接返回数据就行了(字符串强转)
//不需要再放进缓冲区 这里会出错,中文问题
// InputStream is = entity.getContent(); //存放到缓冲区
// long size = entity.getContentLength(); //得到数据的长度
// ByteArrayOutputStream outs = new ByteArrayOutputStream();
// byte[] buffer = new byte[1024];
// int legth = -1;
// //不断的读取
// while ((legth = is.read(buffer))!=-1){
// outs.write(buffer,0,legth);
// }
// is.close();
// outs.close();
// return new String(outs.toByteArray(),"UTF-8");
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
//监听 得到doInBackground的返回值
@Override
protected void onPostExecute(String s) {
//把得到的数据显示在控件上,显示的都是字符
tv_show.setText(s);
}
@Override
protected void onPreExecute() {
//tv_show.setText();
}
}
/**
* 检查网络状态
* @return true:有网络
* false:没有网络
*/
public boolean isNetworkOnline() {
//得到系统服务 网络连接状态类
ConnectivityManager conn = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//得到网络信息
NetworkInfo networkInfo = conn.getActiveNetworkInfo();
//返回值通过判断网络信息是否为NUll并且网络是都连接
return (networkInfo!=null && networkInfo.isConnected());
}
}
其实可以创建一个新页面,放入一个Wed控件,把得到的数据用网页显示出来~~~