zoukankan      html  css  js  c++  java
  • android开启Wifi AP

      1 package com.myapp.android.activity.wifi;
      2 
      3 import android.app.ProgressDialog;
      4 import android.content.Context;
      5 import android.net.wifi.WifiConfiguration;
      6 import android.net.wifi.WifiManager;
      7 import android.os.AsyncTask;
      8 import android.os.Bundle;
      9 import android.view.View;
     10 import android.view.WindowManager;
     11 import android.widget.Button;
     12 
     13 import java.lang.reflect.Method;
     14 
     15 public class WifiAP extends BaseActivity {
     16 
     17     // boolean mIsWifiEnabled = false;
     18     private static final int WIFI_AP_STATE_UNKNOWN = -1;
     19     private static final int WIFI_AP_STATE_DISABLING = 0;
     20     private static final int WIFI_AP_STATE_DISABLED = 1;
     21     private static final int WIFI_AP_STATE_ENABLING = 2;
     22     private static final int WIFI_AP_STATE_ENABLED = 3;
     23     private static final int WIFI_AP_STATE_FAILED = 4;
     24 
     25     private final String[] WIFI_STATE_TEXTSTATE = new String[] {
     26         "DISABLING","DISABLED","ENABLING","ENABLED","FAILED"
     27     };
     28 
     29     private WifiManager wifi;
     30 
     31     @Override
     32     protected void onCreate(Bundle icicle) {
     33         super.onCreate(icicle);
     34         setContentView(R.layout.wifi);
     35         getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
     36                 |WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
     37                 |WindowManager.LayoutParams.FLAG_DIM_BEHIND
     38         );
     39 
     40         wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
     41     }
     42 
     43     @Override
     44     public void onResume() {
     45         super.onResume();
     46         updateStatusDisplay();
     47     }
     48 
     49     public void toggleWifi(View v) {
     50         boolean wifiApIsOn = getWifiAPState()==WIFI_AP_STATE_ENABLED || getWifiAPState()==WIFI_AP_STATE_ENABLING;
     51         new SetWifiAPTask(!wifiApIsOn,false).execute();
     52     }
     53 
     54     public void close(View v) {
     55         boolean wifiApIsOn = getWifiAPState()==WIFI_AP_STATE_ENABLED || getWifiAPState()==WIFI_AP_STATE_ENABLING;
     56         if (wifiApIsOn) {
     57             new SetWifiAPTask(false,true).execute();
     58         } else {
     59             finish();
     60         }
     61     }
     62 
     63 
     64     /**
     65      * Endable/disable wifi
     66      * @param enabled
     67      * @return WifiAP state
     68      */
     69     private int setWifiApEnabled(boolean enabled) {
     70         Log.d("WifiAP", "*** setWifiApEnabled CALLED **** " + enabled);
     71         if (enabled && wifi.getConnectionInfo() !=null) {
     72             wifi.setWifiEnabled(false);
     73             try {Thread.sleep(1500);} catch (Exception e) {}
     74         }
     75 
     76         //int duration = Toast.LENGTH_LONG;
     77         //String toastText = "MobileAP status: ";
     78         int state = WIFI_AP_STATE_UNKNOWN;
     79         try {
     80             wifi.setWifiEnabled(false);
     81             Method method1 = wifi.getClass().getMethod("setWifiApEnabled",
     82                 WifiConfiguration.class, boolean.class);
     83             method1.invoke(wifi, null, enabled); // true
     84             Method method2 = wifi.getClass().getMethod("getWifiApState");
     85             state = (Integer) method2.invoke(wifi);
     86         } catch (Exception e) {
     87            Log.e(WIFI_SERVICE, e.getMessage());
     88            // toastText += "ERROR " + e.getMessage();
     89         }
     90 
     91         if (!enabled) {
     92             int loopMax = 10;
     93             while (loopMax>0 && (getWifiAPState()==WIFI_AP_STATE_DISABLING
     94                     || getWifiAPState()==WIFI_AP_STATE_ENABLED
     95                     || getWifiAPState()==WIFI_AP_STATE_FAILED)) {
     96                 try {Thread.sleep(500);loopMax--;} catch (Exception e) {}
     97             }
     98             wifi.setWifiEnabled(true);
     99         } else if (enabled) {
    100             int loopMax = 10;
    101             while (loopMax>0 && (getWifiAPState()==WIFI_AP_STATE_ENABLING
    102                     || getWifiAPState()==WIFI_AP_STATE_DISABLED
    103                     || getWifiAPState()==WIFI_AP_STATE_FAILED)) {
    104                 try {Thread.sleep(500);loopMax--;} catch (Exception e) {}
    105             }
    106         }
    107 
    108         return state;
    109     }
    110 
    111 
    112     private int getWifiAPState() {
    113         int state = WIFI_AP_STATE_UNKNOWN;
    114         try {
    115             Method method2 = wifi.getClass().getMethod("getWifiApState");
    116             state = (Integer) method2.invoke(wifi);
    117         } catch (Exception e) {}
    118         Log.d("WifiAP", "getWifiAPState.state " + (state==-1?"UNKNOWN":WIFI_STATE_TEXTSTATE[state]));
    119         return state;
    120     }
    121 
    122     private void updateStatusDisplay() {
    123 
    124         if (getWifiAPState()==WIFI_AP_STATE_ENABLED || getWifiAPState()==WIFI_AP_STATE_ENABLING) {
    125             ((Button)findViewById(R.id.btnWifiToggle)).setText("Turn off");
    126             findViewById(R.id.bg).setBackgroundResource(R.drawable.bg_wifi_on);
    127         } else {
    128             ((Button)findViewById(R.id.btnWifiToggle)).setText("Turn on");
    129             findViewById(R.id.bg).setBackgroundResource(R.drawable.bg_wifi_off);
    130         }
    131 
    132     }
    133 
    134 
    135     class SetWifiAPTask extends AsyncTask<Void, Void, Void> {
    136 
    137         boolean mMode;
    138         boolean mFinish;
    139 
    140         public SetWifiAPTask(boolean mode, boolean finish) {
    141             mMode = mode;
    142             mFinish = finish;
    143         }
    144 
    145         ProgressDialog d = new ProgressDialog(WifiAP.this);
    146 
    147         @Override
    148         protected void onPreExecute() {
    149             super.onPreExecute();
    150             d.setTitle("Turning WiFi AP " + (mMode?"on":"off") + "...");
    151             d.setMessage("...please wait a moment.");
    152             d.show();
    153         }
    154 
    155         @Override
    156         protected void onPostExecute(Void aVoid) {
    157             super.onPostExecute(aVoid);
    158             try {d.dismiss();} catch (IllegalArgumentException e) {};
    159             updateStatusDisplay();
    160             if (mFinish) finish();
    161         }
    162 
    163         @Override
    164         protected Void doInBackground(Void... params) {
    165             setWifiApEnabled(mMode);
    166             return null;
    167         }
    168     }
    169 
    170 
    171 }

    这是在stackoverflow上看到的一个例子,但是运行不成功,原因不详..继续了解中...

  • 相关阅读:
    第1章:路线图
    第0章:战胜恐惧和懊悔
    c++ 变量 定义 声明
    两个无符号数相减 可以得到负数
    c++ cast operator(类型转换操作符)
    C++中static 的使用方式,以及与c中的static的区别
    重载overload 重写override 重定义redefining
    用到位运算的题目
    C++ 虚函数表解析
    虚函数 动态绑定 实现方式是:虚函数表
  • 原文地址:https://www.cnblogs.com/trying/p/2773821.html
Copyright © 2011-2022 走看看