android开启Wifi AP
16lz
2021-01-26
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_ENABLING102 || getWifiAPState()==WIFI_AP_STATE_DISABLED103 || 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 @Override148 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 @Override156 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 @Override164 protected Void doInBackground(Void... params) {165 setWifiApEnabled(mMode);166 return null;167 }168 }169 170 171 }
这是在stackoverflow上看到的一个例子,但是运行不成功,原因不详..继续了解中...
更多相关文章
- ”Android(安卓)Application Framework FAQ“关于Android框架的
- React-native 问题汇总
- android contentProvider 小例子
- android 查看手机运行的进程列表
- android 图片拖动简单例子
- AndroidOAuth认证例子
- ExpandableButtonMenu |底部弹出菜单
- Android(安卓)Studio入门小例子
- 运行时获取Android(安卓)API版本