这两天,无意中看到飞鸽传书的wifi热点创建与搜索模块,于是乎很蛋疼的还原了一下他的这一小模块代码,感觉效果差不多,跟大家分享一下:
源码下载地址:http://download.csdn.net/download/weidi1989/5293352
我们先来看看效果图:
1.山寨机主界面
2.进应用就会自动搜索wifi,这个动画效果截屏变形了。将就一下吧
3.搜索结果显示
4.连接上我另外一台山寨机创建的热点
5.正在创建热点
6.热点创建成功,关于那个黑黑的gif动画,我试了三种方法:①.网上导了那个很泛滥的包,不行,②.用Movie实现的动画,还是不行,在有的机器上会花屏,③.就是下面这个效果了,自定义的一个view,由于图片是透明的,所以黑色底没有解决。
下面是几个关键类的代码:
1.我们先来看看这个广播:WTBroadcast,通过这个广播,可以及时更新我们的界面显示信息。重点是“android.net.wifi.WIFI_STATE_CHANGED” 与“android.net.wifi.STATE_CHANGE”两个状态的区别
/** * wifi状态监听广播 * * @author way * */ public class WTBroadcast extends BroadcastReceiver { public static ArrayList<EventHandler> ehList = new ArrayList(); public void onReceive(Context paramContext, Intent paramIntent) { if (paramIntent.getAction().equals("android.net.wifi.SCAN_RESULTS")) { // 搜索到wifi热点结果广播 Log.i("WTScanResults", "android.net.wifi.SCAN_RESULTS"); // 遍历通知各个监听接口 for (int j = 0; j < ehList.size(); j++) ((EventHandler) ehList.get(j)).scanResultsAvailable(); } else if (paramIntent.getAction().equals( "android.net.wifi.WIFI_STATE_CHANGED")) { // wifi打开或关闭广播(不需要连接上一个SSID) Log.e("WTScanResults", "android.net.wifi.WIFI_STATE_CHANGED"); for (int j = 0; j < ehList.size(); j++) ((EventHandler) ehList.get(j)).wifiStatusNotification(); } else if (paramIntent.getAction().equals( "android.net.wifi.STATE_CHANGE")) { // 连接上一个SSID后发出的广播,与android.net.wifi.WIFI_STATE_CHANGED有一定区别 Log.e("WTScanResults", "android.net.wifi.STATE_CHANGE"); for (int i = 0; i < ehList.size(); i++) ((EventHandler) ehList.get(i)).handleConnectChange(); } } /** * 用来更新的接口 * * @author way * */ public static abstract interface EventHandler { public abstract void handleConnectChange(); public abstract void scanResultsAvailable(); public abstract void wifiStatusNotification(); } }
2.接下来是主Activity了:WTActivity,在这个Activity中,我们来处理各种界面事件,同时根据wifi状态变化,动态更新界面,值得学习的是自定义view和handler事件处理,还有超时线程的理论。内容比较多,我把它综合到一个类中,其实可以把一些常用的函数放在Application类中。
/** * 主Activity * * @author way * */ public class WTActivity extends Activity implements WTBroadcast.EventHandler { public static final int m_nWTSearchTimeOut = 0;// 搜索超时 public static final int m_nWTScanResult = 1;// 搜索到wifi返回结果 public static final int m_nWTConnectResult = 2;// 连接上wifi热点 public static final int m_nCreateAPResult = 3;// 创建热点结果 public static final int m_nUserResult = 4;// 用户上线人数更新命令(待定) public static final int m_nWTConnected = 5;// 点击连接后断开wifi,3.5秒后刷新adapter public static final String PACKAGE_NAME = "com.way.wifi"; public static final String FIRST_OPEN_KEY = "version"; public static final String WIFI_AP_HEADER = "way_"; public static final String WIFI_AP_PASSWORD = "way12345"; private WTSearchAnimationFrameLayout m_FrameLWTSearchAnimation; private LinearLayout m_LinearLDialog; private LinearLayout m_LinearLIntroduction; private Button m_btnBack; private Button m_btnCancelDialog; private Button m_btnConfirmDialog; private Button m_btnCreateWT; private Button m_btnSearchWT; private GifView m_gifRadar; private boolean m_isFirstOpen = true; private LinearLayout m_linearLCreateAP; private ListView m_listVWT; ArrayList<ScanResult> m_listWifi = new ArrayList(); private ProgressBar m_progBarCreatingAP; private TextView m_textVContentDialog; private TextView m_textVPromptAP; private TextView m_textVWTPrompt; private WifiAdmin m_wiFiAdmin; private CreateAPProcess m_createAPProcess; private WTSearchProcess m_wtSearchProcess; private int wTOperateEnum = WTOperateEnum.NOTHING; private WTAdapter m_wTAdapter; public Handler handler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case m_nWTSearchTimeOut://wifi搜索超时处理 m_wtSearchProcess.stop(); m_FrameLWTSearchAnimation.stopAnimation(); m_listWifi.clear(); m_textVWTPrompt.setVisibility(View.VISIBLE); m_textVWTPrompt.setText(R.string.wt_list_empty); break; case m_nWTScanResult://搜索到可连接wifi m_listWifi.clear(); int size = m_wiFiAdmin.mWifiManager.getScanResults().size(); if (size > 0) { for (int i = 0; i < size; ++i) { ScanResult scanResult = m_wiFiAdmin.mWifiManager .getScanResults().get(i); // Log.i("way", "SSID = " + scanResult.SSID); if (scanResult.SSID.startsWith(WIFI_AP_HEADER)) { m_listWifi.add(scanResult); } } if (m_listWifi.size() > 0) { m_wtSearchProcess.stop(); m_FrameLWTSearchAnimation.stopAnimation(); m_textVWTPrompt.setVisibility(View.GONE); m_wTAdapter.setData(m_listWifi); m_wTAdapter.notifyDataSetChanged(); } } break; case m_nWTConnectResult://连接上一个热点更新一下状态 m_wTAdapter.notifyDataSetChanged(); break; case m_nCreateAPResult://创建热点结果 m_createAPProcess.stop(); m_progBarCreatingAP.setVisibility(View.GONE); if (((m_wiFiAdmin.getWifiApState() == 3) || (m_wiFiAdmin .getWifiApState() == 13)) && (m_wiFiAdmin.getApSSID().startsWith(WIFI_AP_HEADER))) { m_textVWTPrompt.setVisibility(View.GONE); m_linearLCreateAP.setVisibility(View.VISIBLE); m_btnCreateWT.setVisibility(View.VISIBLE); m_gifRadar.setVisibility(View.VISIBLE); m_btnCreateWT.setBackgroundResource(R.drawable.x_ap_close); m_textVPromptAP .setText(getString(R.string.pre_wt_connect_ok) + getString(R.string.middle_wt_connect_ok) + m_wiFiAdmin.getApSSID() + getString(R.string.suf_wt_connect_ok)); } else { m_btnCreateWT.setVisibility(View.VISIBLE); m_btnCreateWT.setBackgroundResource(R.drawable.x_wt_create); m_textVPromptAP.setText(R.string.create_ap_fail); } break; case m_nUserResult: // 更新用户上线人数,待定 break; case m_nWTConnected://点击连接热点超时处理 m_wTAdapter.notifyDataSetChanged(); break; default: break; } } }; /** * 获取共享热点状态 * @return 是否开启共享 */ public boolean getWifiApState() { try { WifiManager localWifiManager = (WifiManager) getSystemService("wifi"); int i = ((Integer) localWifiManager.getClass() .getMethod("getWifiApState", new Class[0]) .invoke(localWifiManager, new Object[0])).intValue(); return (3 == i) || (13 == i); } catch (Exception localException) { } return false; } /** * 是否连接上wifi * @return */ public boolean isWifiConnect() { boolean isConnect = true; if (!((ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE)) .getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected()) isConnect = false; return isConnect; } /** * 是否为第一次打开应用,根据版本判断会比较好,因为商业应用会执行自动更新, * @return */ private boolean isFirstOpen() { try { PackageInfo info = getPackageManager().getPackageInfo(PACKAGE_NAME, 0); int currentVersion = info.versionCode; SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this); int lastVersion = prefs.getInt(FIRST_OPEN_KEY, 0); if (currentVersion > lastVersion) { prefs.edit().putInt(FIRST_OPEN_KEY, currentVersion).commit(); return true; } } catch (PackageManager.NameNotFoundException e) { Log.w("way", e); } return false; } @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.wt_main); m_wtSearchProcess = new WTSearchProcess(); m_createAPProcess = new CreateAPProcess(); m_wiFiAdmin = WifiAdmin.getInstance(this); initView(); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); if (!m_isFirstOpen) init();//如果不是第一次打开应用,就执行更新 } @Override protected void onDestroy() { // TODO Auto-generated method stub super.onDestroy(); WTBroadcast.ehList.remove(this); } // 初始化view private void initView() { m_isFirstOpen = isFirstOpen();//是否第一次开启应用 m_LinearLIntroduction = ((LinearLayout) findViewById(R.id.introduction_layout_wt_main));// 介绍使用的view m_LinearLIntroduction.setOnClickListener(new OnClickListener() { public void onClick(View paramView) { m_LinearLIntroduction.setVisibility(View.GONE); init(); } }); m_btnBack = ((Button) findViewById(R.id.back_btn_wt_main));// 返回键 m_btnBack.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onBackPressed(); } }); m_linearLCreateAP = ((LinearLayout) findViewById(R.id.create_ap_llayout_wt_main));// 创建热点的view m_progBarCreatingAP = ((ProgressBar) findViewById(R.id.creating_progressBar_wt_main));// 创建热点的进度条 m_textVPromptAP = ((TextView) findViewById(R.id.prompt_ap_text_wt_main));//创建热点的那个提醒textView m_btnSearchWT = ((Button) findViewById(R.id.search_btn_wt_main));// 搜索热点按钮 m_btnSearchWT.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (!m_wtSearchProcess.running) {// 如果搜索线程没有启动 if (m_wiFiAdmin.getWifiApState() == 13 || m_wiFiAdmin.getWifiApState() == 3) { wTOperateEnum = WTOperateEnum.SEARCH; m_LinearLDialog.setVisibility(View.VISIBLE); m_textVContentDialog.setText(R.string.opened_ap_prompt); return; } if (!m_wiFiAdmin.mWifiManager.isWifiEnabled()) {// 如果wifi打开着的 m_wiFiAdmin.OpenWifi(); } m_textVWTPrompt.setVisibility(View.VISIBLE); m_textVWTPrompt.setText(R.string.wt_searching); m_linearLCreateAP.setVisibility(View.GONE); m_gifRadar.setVisibility(View.GONE); m_btnCreateWT.setBackgroundResource(R.drawable.x_wt_create); m_wiFiAdmin.startScan(); m_wtSearchProcess.start(); m_FrameLWTSearchAnimation.startAnimation(); } else { // 重新启动一下或者干脆return掉 m_wtSearchProcess.stop(); m_wiFiAdmin.startScan(); m_wtSearchProcess.start(); } } }); m_btnCreateWT = ((Button) findViewById(R.id.create_btn_wt_main));// 创建热点的按钮 m_btnCreateWT.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub if (m_wiFiAdmin.getWifiApState() == 4) {//如果不支持热点创建 Toast.makeText(getApplicationContext(), R.string.not_create_ap, Toast.LENGTH_SHORT).show(); return; } if (m_wiFiAdmin.mWifiManager.isWifiEnabled()) {//如果wifi正打开着的,就提醒用户 wTOperateEnum = WTOperateEnum.CREATE; m_LinearLDialog.setVisibility(View.VISIBLE); m_textVContentDialog.setText(R.string.close_wifi_prompt); return; } if (((m_wiFiAdmin.getWifiApState() == 3) || (m_wiFiAdmin .getWifiApState() == 13)) && (!m_wiFiAdmin.getApSSID().startsWith(WIFI_AP_HEADER))) {//如果已经存在一个其他的共享热点 wTOperateEnum = WTOperateEnum.CREATE; m_LinearLDialog.setVisibility(View.VISIBLE); m_textVContentDialog.setText(R.string.ap_used); return; } if (((m_wiFiAdmin.getWifiApState() == 3) || (m_wiFiAdmin .getWifiApState() == 13)) && (m_wiFiAdmin.getApSSID().startsWith(WIFI_AP_HEADER))) {//如果存在一个同名的共享热点 wTOperateEnum = WTOperateEnum.CLOSE; m_LinearLDialog.setVisibility(View.VISIBLE); m_textVContentDialog.setText(R.string.close_ap_prompt); return; } if (m_wtSearchProcess.running) {//如果正在搜索状态 m_wtSearchProcess.stop(); m_FrameLWTSearchAnimation.stopAnimation(); } m_wiFiAdmin.closeWifi(); m_wiFiAdmin.createWiFiAP(m_wiFiAdmin.createWifiInfo( WIFI_AP_HEADER + getLocalHostName(), WIFI_AP_PASSWORD, 3, "ap"), true); m_createAPProcess.start(); m_listWifi.clear(); m_wTAdapter.setData(m_listWifi); m_wTAdapter.notifyDataSetChanged(); m_linearLCreateAP.setVisibility(View.VISIBLE); m_progBarCreatingAP.setVisibility(View.VISIBLE); m_btnCreateWT.setVisibility(View.GONE); m_textVWTPrompt.setVisibility(View.GONE); m_textVPromptAP.setText(getString(R.string.creating_ap)); } }); m_FrameLWTSearchAnimation = ((WTSearchAnimationFrameLayout) findViewById(R.id.search_animation_wt_main));// 搜索时的动画 m_listVWT = ((ListView) findViewById(R.id.wt_list_wt_main));// 搜索到的热点listView m_wTAdapter = new WTAdapter(this, m_listWifi); m_listVWT.setAdapter(m_wTAdapter); m_textVWTPrompt = (TextView) findViewById(R.id.wt_prompt_wt_main);//搜索时提醒的textView m_gifRadar = (GifView) findViewById(R.id.radar_gif_wt_main);//创建热点后的gif动画View m_LinearLDialog = (LinearLayout) findViewById(R.id.dialog_layout_wt_main);//与用户交互的对话框 m_textVContentDialog = (TextView) findViewById(R.id.content_text_wtdialog); m_btnConfirmDialog = (Button) findViewById(R.id.confirm_btn_wtdialog); m_btnCancelDialog = (Button) findViewById(R.id.cancel_btn_wtdialog); // 弹出对话框的确认按钮事件 m_btnConfirmDialog.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub m_LinearLDialog.setVisibility(View.GONE); switch (wTOperateEnum) { case WTOperateEnum.CLOSE://如果是执行关闭热点事件 m_textVWTPrompt.setVisibility(View.VISIBLE); m_textVWTPrompt.setText(""); m_linearLCreateAP.setVisibility(View.GONE); m_btnCreateWT.setBackgroundResource(R.drawable.x_wt_create); m_gifRadar.setVisibility(View.GONE); m_wiFiAdmin.createWiFiAP(m_wiFiAdmin.createWifiInfo( m_wiFiAdmin.getApSSID(), "81028066", 3, "ap"), false); m_wiFiAdmin.OpenWifi();//关闭热点后重新开启一下wifi m_wtSearchProcess.start(); m_wiFiAdmin.startScan(); m_FrameLWTSearchAnimation.startAnimation(); m_textVWTPrompt.setVisibility(View.VISIBLE); m_textVWTPrompt.setText(R.string.wt_searching); m_linearLCreateAP.setVisibility(View.GONE); m_btnCreateWT.setBackgroundResource(R.drawable.x_wt_create); break; case WTOperateEnum.CREATE://如果是执行创建热点事件 if (m_wtSearchProcess.running) { m_wtSearchProcess.stop(); m_FrameLWTSearchAnimation.stopAnimation(); } m_wiFiAdmin.closeWifi(); m_wiFiAdmin.createWiFiAP(m_wiFiAdmin.createWifiInfo( WIFI_AP_HEADER + getLocalHostName(), WIFI_AP_PASSWORD, 3, "ap"), true); m_createAPProcess.start(); m_listWifi.clear(); m_wTAdapter.setData(m_listWifi); m_wTAdapter.notifyDataSetChanged(); m_linearLCreateAP.setVisibility(View.VISIBLE); m_progBarCreatingAP.setVisibility(View.VISIBLE); m_btnCreateWT.setVisibility(View.GONE); m_textVWTPrompt.setVisibility(View.GONE); m_textVPromptAP.setText(getString(R.string.creating_ap)); break; case WTOperateEnum.SEARCH://如果是执行搜索wifi事件 m_textVWTPrompt.setVisibility(View.VISIBLE); m_textVWTPrompt.setText(R.string.wt_searching); m_linearLCreateAP.setVisibility(View.GONE); m_btnCreateWT.setVisibility(View.VISIBLE); m_btnCreateWT.setBackgroundResource(R.drawable.x_wt_create); m_gifRadar.setVisibility(View.GONE); if (m_createAPProcess.running) m_createAPProcess.stop(); m_wiFiAdmin.createWiFiAP( m_wiFiAdmin.createWifiInfo(m_wiFiAdmin.getApSSID(), WIFI_AP_PASSWORD, 3, "ap"), false); m_wiFiAdmin.OpenWifi(); m_wtSearchProcess.start(); m_FrameLWTSearchAnimation.startAnimation(); break; default: break; } } }); // 弹出对话框取消按钮事件 m_btnCancelDialog.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub m_LinearLDialog.setVisibility(View.GONE); } }); WTBroadcast.ehList.add(this);// 注意监听广播, if (m_isFirstOpen)//如果是第一次开启应用,打开帮助提示 m_LinearLIntroduction.setVisibility(View.VISIBLE); } /** * 获取手机信息 * @return */ public String getLocalHostName() { String str1 = Build.BRAND; String str2 = Build.MODEL; if (-1 == str2.toUpperCase().indexOf(str1.toUpperCase())) str2 = str1 + "_" + str2; return str2; } /** * 初始化 */ private void init() { // TODO Auto-generated method stub if ((this.m_wtSearchProcess.running) || (this.m_createAPProcess.running)) return; //只有以下三种情况 if (!isWifiConnect() && !getWifiApState()) {//没有创建热点也没有打开wifi m_wiFiAdmin.OpenWifi(); m_wtSearchProcess.start(); m_wiFiAdmin.startScan(); m_FrameLWTSearchAnimation.startAnimation(); m_textVWTPrompt.setVisibility(View.VISIBLE); m_textVWTPrompt.setText(R.string.wt_searching); m_linearLCreateAP.setVisibility(View.GONE); m_btnCreateWT.setBackgroundResource(R.drawable.x_wt_create); } if (isWifiConnect()) {//如果打开了wifi this.m_wiFiAdmin.startScan(); this.m_wtSearchProcess.start(); this.m_FrameLWTSearchAnimation.startAnimation(); this.m_textVWTPrompt.setVisibility(0); this.m_textVWTPrompt.setText(R.string.wt_searching); this.m_linearLCreateAP.setVisibility(8); this.m_btnCreateWT.setBackgroundResource(R.drawable.x_wt_create); this.m_gifRadar.setVisibility(8); m_listWifi.clear(); if (m_wiFiAdmin.mWifiManager.getScanResults() != null) { int result = m_wiFiAdmin.mWifiManager.getScanResults().size(); int i = 0; for (i = 0; i < result; ++i) { if (m_wiFiAdmin.mWifiManager.getScanResults().get(i).SSID .startsWith(WIFI_AP_HEADER)) m_listWifi.add(m_wiFiAdmin.mWifiManager .getScanResults().get(i)); } Log.i("way", "wifi size:" + m_wiFiAdmin.mWifiManager.getScanResults().size()); } m_wTAdapter.setData(m_listWifi); m_wTAdapter.notifyDataSetChanged(); } if (getWifiApState()) {//如果创建了热点 if (m_wiFiAdmin.getApSSID().startsWith(WIFI_AP_HEADER)) { m_textVWTPrompt.setVisibility(View.GONE); m_linearLCreateAP.setVisibility(View.VISIBLE); m_progBarCreatingAP.setVisibility(View.GONE); m_btnCreateWT.setVisibility(View.VISIBLE); m_gifRadar.setVisibility(View.VISIBLE); m_btnCreateWT.setBackgroundResource(R.drawable.x_ap_close); m_textVPromptAP.setText(getString(R.string.pre_wt_connect_ok) + getString(R.string.middle_wt_connect_ok) + m_wiFiAdmin.getApSSID() + getString(R.string.suf_wt_connect_ok)); } } } @Override public void handleConnectChange() {//监听广播,如果连接上一个热点,执行更新界面 // TODO Auto-generated method stub Message msg = handler.obtainMessage(m_nWTConnectResult); handler.sendMessage(msg); } @Override public void scanResultsAvailable() {//监听广播,搜索到各个wifi // TODO Auto-generated method stub Message msg = handler.obtainMessage(m_nWTScanResult); handler.sendMessage(msg); } @Override public void wifiStatusNotification() {//监听打开或关闭wifi广播 // TODO Auto-generated method stub m_wiFiAdmin.mWifiManager.getWifiState(); } //创建热点进程与超时处理 class CreateAPProcess implements Runnable { public boolean running = false; private long startTime = 0L; private Thread thread = null; CreateAPProcess() { } public void run() { while (true) { if (!this.running) return; if ((m_wiFiAdmin.getWifiApState() == 3) || (m_wiFiAdmin.getWifiApState() == 13) || (System.currentTimeMillis() - this.startTime >= 30000L)) { Message msg = handler.obtainMessage(m_nCreateAPResult); handler.sendMessage(msg); } try { Thread.sleep(5L); } catch (Exception localException) { } } } public void start() { try { thread = new Thread(this); running = true; startTime = System.currentTimeMillis(); thread.start(); } finally { } } public void stop() { try { this.running = false; this.thread = null; this.startTime = 0L; } finally { } } } //搜索超时处理线程 class WTSearchProcess implements Runnable { public boolean running = false; private long startTime = 0L; private Thread thread = null; WTSearchProcess() { } public void run() { while (true) { if (!this.running) return; if (System.currentTimeMillis() - this.startTime >= 30000L) { // Message localMessage = Message.obtain(handler); // localMessage.what = 0; // localMessage.sendToTarget(); Message msg = handler.obtainMessage(m_nWTSearchTimeOut); handler.sendMessage(msg); } try { Thread.sleep(10L); } catch (Exception localException) { } } } public void start() { try { this.thread = new Thread(this); this.running = true; this.startTime = System.currentTimeMillis(); this.thread.start(); } finally { } } public void stop() { try { this.running = false; this.thread = null; this.startTime = 0L; } finally { } } } }
3.最后是最重要的wifi管理类:WifiAdmin,这里有一些常用的函数,比如说创建一个wifi的WifiConfiguration,创建热点,以及获取各种wifi状态等函数。
/** * wifi管理类 * * @author way * */ public class WifiAdmin { private static WifiAdmin wiFiAdmin = null; private List<WifiConfiguration> mWifiConfiguration; private WifiInfo mWifiInfo; private List<ScanResult> mWifiList; WifiManager.WifiLock mWifiLock; public WifiManager mWifiManager; public WifiAdmin(Context paramContext) { this.mWifiManager = ((WifiManager) paramContext .getSystemService("wifi")); this.mWifiInfo = this.mWifiManager.getConnectionInfo(); } public static WifiAdmin getInstance(Context paramContext) { if (wiFiAdmin == null) wiFiAdmin = new WifiAdmin(paramContext); return wiFiAdmin; } private WifiConfiguration isExsits(String paramString) { Iterator localIterator = this.mWifiManager.getConfiguredNetworks() .iterator(); WifiConfiguration localWifiConfiguration; do { if (!localIterator.hasNext()) return null; localWifiConfiguration = (WifiConfiguration) localIterator.next(); } while (!localWifiConfiguration.SSID.equals("\"" + paramString + "\"")); return localWifiConfiguration; } public void AcquireWifiLock() { this.mWifiLock.acquire(); } public void CreatWifiLock() { this.mWifiLock = this.mWifiManager.createWifiLock("Test"); } public void OpenWifi() { if (!this.mWifiManager.isWifiEnabled()) this.mWifiManager.setWifiEnabled(true); } public void ReleaseWifiLock() { if (this.mWifiLock.isHeld()) this.mWifiLock.acquire(); } public void addNetwork(WifiConfiguration paramWifiConfiguration) { int i = this.mWifiManager.addNetwork(paramWifiConfiguration); this.mWifiManager.enableNetwork(i, true); } public void closeWifi() { this.mWifiManager.setWifiEnabled(false); } public void connectConfiguration(int paramInt) { if (paramInt > this.mWifiConfiguration.size()) return; this.mWifiManager .enableNetwork(((WifiConfiguration) this.mWifiConfiguration .get(paramInt)).networkId, true); } /** * 根据wifi信息创建一个热点 * @param paramWifiConfiguration * @param paramBoolean */ public void createWiFiAP(WifiConfiguration paramWifiConfiguration, boolean paramBoolean) { try { Class localClass = this.mWifiManager.getClass(); Class[] arrayOfClass = new Class[2]; arrayOfClass[0] = WifiConfiguration.class; arrayOfClass[1] = Boolean.TYPE; Method localMethod = localClass.getMethod("setWifiApEnabled", arrayOfClass); WifiManager localWifiManager = this.mWifiManager; Object[] arrayOfObject = new Object[2]; arrayOfObject[0] = paramWifiConfiguration; arrayOfObject[1] = Boolean.valueOf(paramBoolean); localMethod.invoke(localWifiManager, arrayOfObject); return; } catch (Exception localException) { } } /** * 创建一个wifi信息 * @param ssid 名称 * @param paramString2 密码 * @param paramInt 有3个参数,1是无密码,2是简单密码,3是wap加密 * @param paramString3 是"ap"还是"wt" * @return */ public WifiConfiguration createWifiInfo(String ssid, String paramString2, int paramInt, String paramString3) { WifiConfiguration localWifiConfiguration1 = new WifiConfiguration(); localWifiConfiguration1.allowedAuthAlgorithms.clear(); localWifiConfiguration1.allowedGroupCiphers.clear(); localWifiConfiguration1.allowedKeyManagement.clear(); localWifiConfiguration1.allowedPairwiseCiphers.clear(); localWifiConfiguration1.allowedProtocols.clear(); if (paramString3.equals("wt")) { localWifiConfiguration1.SSID = ("\"" + ssid + "\""); WifiConfiguration localWifiConfiguration2 = isExsits(ssid); if (localWifiConfiguration2 != null) mWifiManager.removeNetwork(localWifiConfiguration2.networkId); if (paramInt == 1) { localWifiConfiguration1.wepKeys[0] = ""; localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; } else if (paramInt == 2) { localWifiConfiguration1.hiddenSSID = true; localWifiConfiguration1.wepKeys[0] = ("\"" + paramString2 + "\""); } else { localWifiConfiguration1.preSharedKey = ("\"" + paramString2 + "\""); localWifiConfiguration1.hiddenSSID = true; localWifiConfiguration1.allowedAuthAlgorithms.set(0); localWifiConfiguration1.allowedGroupCiphers.set(2); localWifiConfiguration1.allowedKeyManagement.set(1); localWifiConfiguration1.allowedPairwiseCiphers.set(1); localWifiConfiguration1.allowedGroupCiphers.set(3); localWifiConfiguration1.allowedPairwiseCiphers.set(2); } } else { localWifiConfiguration1.SSID = ssid; localWifiConfiguration1.allowedAuthAlgorithms.set(1); localWifiConfiguration1.allowedGroupCiphers .set(WifiConfiguration.GroupCipher.CCMP); localWifiConfiguration1.allowedGroupCiphers .set(WifiConfiguration.GroupCipher.TKIP); localWifiConfiguration1.allowedGroupCiphers .set(WifiConfiguration.GroupCipher.WEP40); localWifiConfiguration1.allowedGroupCiphers .set(WifiConfiguration.GroupCipher.WEP104); localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; if (paramInt == 1) { localWifiConfiguration1.wepKeys[0] = ""; localWifiConfiguration1.allowedKeyManagement.set(0); localWifiConfiguration1.wepTxKeyIndex = 0; } else if (paramInt == 2) { localWifiConfiguration1.hiddenSSID = true; localWifiConfiguration1.wepKeys[0] = paramString2; } else if (paramInt == 3) { localWifiConfiguration1.preSharedKey = paramString2; localWifiConfiguration1.allowedAuthAlgorithms.set(0); localWifiConfiguration1.allowedProtocols.set(1); localWifiConfiguration1.allowedProtocols.set(0); localWifiConfiguration1.allowedKeyManagement.set(1); localWifiConfiguration1.allowedPairwiseCiphers.set(2); localWifiConfiguration1.allowedPairwiseCiphers.set(1); } } return localWifiConfiguration1; } /** * 端口指定id的wifi * @param paramInt */ public void disconnectWifi(int paramInt) { this.mWifiManager.disableNetwork(paramInt); } /** * 获取热点名 * @return */ public String getApSSID() { try { Method localMethod = this.mWifiManager.getClass() .getDeclaredMethod("getWifiApConfiguration", new Class[0]); if (localMethod == null) return null; Object localObject1 = localMethod.invoke(this.mWifiManager, new Object[0]); if (localObject1 == null) return null; WifiConfiguration localWifiConfiguration = (WifiConfiguration) localObject1; if (localWifiConfiguration.SSID != null) return localWifiConfiguration.SSID; Field localField1 = WifiConfiguration.class .getDeclaredField("mWifiApProfile"); if (localField1 == null) return null; localField1.setAccessible(true); Object localObject2 = localField1.get(localWifiConfiguration); localField1.setAccessible(false); if (localObject2 == null) return null; Field localField2 = localObject2.getClass() .getDeclaredField("SSID"); localField2.setAccessible(true); Object localObject3 = localField2.get(localObject2); if (localObject3 == null) return null; localField2.setAccessible(false); String str = (String) localObject3; return str; } catch (Exception localException) { } return null; } /** * 获取wifi名 * @return */ public String getBSSID() { if (this.mWifiInfo == null) return "NULL"; return this.mWifiInfo.getBSSID(); } public List<WifiConfiguration> getConfiguration() { return this.mWifiConfiguration; } /** * 获取ip地址 * @return */ public int getIPAddress() { if (this.mWifiInfo == null) return 0; return this.mWifiInfo.getIpAddress(); } /** * 获取物理地址 * @return */ public String getMacAddress() { if (this.mWifiInfo == null) return "NULL"; return this.mWifiInfo.getMacAddress(); } /** * 获取网络id * @return */ public int getNetworkId() { if (this.mWifiInfo == null) return 0; return this.mWifiInfo.getNetworkId(); } /** * 获取热点创建状态 * @return */ public int getWifiApState() { try { int i = ((Integer) this.mWifiManager.getClass() .getMethod("getWifiApState", new Class[0]) .invoke(this.mWifiManager, new Object[0])).intValue(); return i; } catch (Exception localException) { } return 4; } /** * 获取wifi连接信息 * @return */ public WifiInfo getWifiInfo() { return this.mWifiManager.getConnectionInfo(); } public List<ScanResult> getWifiList() { return this.mWifiList; } public StringBuilder lookUpScan() { StringBuilder localStringBuilder = new StringBuilder(); for (int i = 0;; i++) { if (i >= 2) return localStringBuilder; localStringBuilder.append("Index_" + new Integer(i + 1).toString() + ":"); localStringBuilder.append(((ScanResult) this.mWifiList.get(i)) .toString()); localStringBuilder.append("/n"); } } /** * 设置wifi搜索结果 */ public void setWifiList() { this.mWifiList = this.mWifiManager.getScanResults(); } /** * 开始搜索wifi */ public void startScan() { this.mWifiManager.startScan(); } }