AndroidWIFI的基本实现

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控件,把得到的数据用网页显示出来~~~

你可能感兴趣的:(嵌入式,安卓)