AndroidWIFI的基本实现

来源:互联网 发布:js将div内容清空 编辑:程序博客网 时间:2024/05/18 12:37

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

0 0