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上看到的一个例子,但是运行不成功,原因不详..继续了解中...