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